震惊,这篇文章竟然因为色情原因被删除 | laravel 5.5 相对 5.1 中的变动

Posted 血衫非弧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了震惊,这篇文章竟然因为色情原因被删除 | laravel 5.5 相对 5.1 中的变动 相关的知识,希望对你有一定的参考价值。

好吧,就是这篇文章被举报了。



这是周一编辑的。


震惊,这篇文章竟然因为色情原因被删除 | laravel 5.5 相对 5.1 中的变动 (1)

我原封不动再发一遍看看。以下是原文:

震惊,这篇文章竟然因为色情原因被删除 | laravel 5.5 相对 5.1 中的变动 (1)

laravel 5.5也发布了一段时间了。 这是 laravel 第二个 LTS 版本,自然不能错过。实际上我也很少关注中间几个版本,并不了解它们增加了哪些东西。

趁着这个国庆把5.5的文档粗略看了一遍,以前对 laravel 多以应用为主,需要的时候才会去查,研究不算深,所以应该会有很多疏漏,或是错误,我也会不断修改过来,欢迎指正。

这篇主要讲一些基础性的不同,从 5.5 的目录来看是从前言前端开发的内容。当前本文的修改时间是 2017-10-02 22:23:44。



相同的部分我就不多赘述了,大部分只点出目前看到的不同的地方。

查阅的 laravel 手册为:

  • 5.5

  • 5.1

目录

刚开始看目录的时候,乍看之下觉得怎么多了这么多东西。实际上5.5的文档将很多原本属于5.1文档中属于系统服务的东西抽出来组成新的主题,所以显得比较多。

另外文档主题的顺序更合理一些,比如文件夹结构的内容就放到了入门指南里,易于新手入门,快速掌握。

安装部署

这一部分没太大的变化,主要是环境依赖有变化:

  • php 必须7.0.0以上

  • 多了『PHP XML 扩展』的依赖。

对于 Mac 的开发环境,多提供了一个 「Valet」环境。

5.5的文件目录新增了几个(有些也可能以前有,我没使用 Orz):

  • 路由,从 http 目录下的单个文件 routes.php 变成与 app 目录平级的 \routes 目录

  • 邮件的逻辑,app\Mail 目录

  • 应用授权策略,app\Policies 目录

  • 自定义验证规则对象,app\Rules 目录

文档还给了一个更加详细的 nginx 的配置案例,可以看一下。

核心架构

了解5.1的基本不用看了。毕竟核心架构也不可能有多大变化。

  • 请求周期

  • Container

  • Provider

  • Facades

  • Contracts

基本功能

* 路由			
* 中间件		
* CSRF 保护 	
* 控制器				
* 请求				
* 响应
* 视图
* URL
* Session
* 表单验证
* 错误与日志

路由

路由方法

路由参照 RESTful API,实现了里边常用的请求类型(除了 head,用的少就没所谓了):

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

csrf 跟以前一样

检查当前路由named

public function handle($request, Closure $next){    if ($request->route()->named('profile')) {        //
    }    return $next($request);
}

路由命名空间namespace

Route::namespace('Admin')->group(function () {    // 在 "App\Http\Controllers\Admin" 命名空间下的控制器});

路由模型绑定

增加了隐式绑定,还可以自定义键名,比较复杂,可以点击这里直接查看手册 https://d.laravel-china.org/docs/5.5/routing#route-model-binding

Route::get('api/users/{user}', function (App\User $user) {    return $user->email;
});

访问当前路由

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

控制器

__invoke()

单个行为控制器

class ShowProfile extends Controller{    /**     * 展示给定用户的信息。     */
    public function __invoke($id)    {        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

资源控制器

5.1就存在了,不过一直没怎么用。比较复杂,包括资源路由、本地化 uri 等等,可以直接看文档: https://d.laravel-china.org/docs/5.5/controllers#resource-controllers

请求

有很多5.1就存在的实用的方法,列一下:

$uri = $request->path();if ($request->is('admin/*')) {    //}// Without Query String...$url = $request->url();// With Query String...$url = $request->fullUrl();

关于旧输入也列一下:

$username = $request->old('username');# 前端中使用:old('username')

文件

终于有了文件扩展名的判断了,感谢!

$path = $request->photo->path();

$extension = $request->photo->extension();

存储文件的方法也有了改变:

$path = $request->photo->store('images');

$path = $request->photo->store('images', 's3');


$path = $request->photo->storeAs('images', 'filename.jpg');

$path = $request->photo->storeAs('images', 'filename.jpg', 's3');

配置 TLS/SSL

这一块没有在5.1用过。

在 Laravel 应用程序中包含 App\Http\Middleware\TrustProxies 中间件,快速自定义应用程序信任的负载均衡器或代理,还可以配置代理发送包含原始请求信息的请求头:

<?phpnamespace App\Http\Middleware;use Illuminate\Http\Request;use Fideloper\Proxy\TrustProxies as Middleware;class TrustProxies extends Middleware{    /**     * 这个应用程序的可信代理列表     *     * @var array     */
    protected $proxies = [        '192.168.1.1',        '192.168.1.2',
    ];    /**     * 当前代理响应头映射关系     *     * @var array     */
    protected $headers = [
        Request::HEADER_FORWARDED => 'FORWARDED',
        Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
        Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
        Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
        Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
    ];
}

验证

bail 规则

使得在某个属性第一次验证失败后停止运行验证规则:

$this->validate($request, [    'title' => 'bail|required|unique:posts|max:255',    'body' => 'required',
]);

错误日志

最大的变化就是——终于可以根据log_level的配置,只打印对应级别的日志了。

'log_level' => env('APP_LOG_LEVEL', 'error'),

模板

新增好几个命令。

// unless 不是新增的

@unless (Auth::check())
    你尚未登录。
@endunless

@isset

@isset($records)    // $records 被定义并且不为空...@endisset

@empty($records)    // $records 是「空」的...@endempty

@auth 和 @guest

@auth    // 用户已经通过身份认证...@endauth

@guest    // 用户没有通过身份认证...@endguest

loop 循环变量

$loop 变量也包含了其它各种有用的属性:

属性 描述
$loop->index 当前循环迭代的索引(从0开始)。
$loop->iteration 当前循环迭代 (从1开始)。
$loop->remaining 循环中剩余迭代数量。
$loop->count 迭代中的数组项目总数。
$loop->first 当前迭代是否是循环中的首次迭代。
$loop->last 当前迭代是否是循环中的最后一次迭代。
$loop->depth 当前循环的嵌套级别。
$loop->parent 在嵌套循环中,父循环的变量。
@foreach ($users as $user)
    @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            This is first iteration of the parent loop.
        @endif
    @endforeach@endforeach

@includeIf @includeWhen

@includeIf('view.name', ['some' => 'data'])
@includeWhen($boolean, 'view.name', ['some' => 'data'])

前端相关

laravel 5.5 通过 Laravel Mix,很方便的使用前端框架,例如 Bootstrap vue 和 React。这一部分几乎是全新的,可以在文档中直接查看。 https://d.laravel-china.org/docs/5.5/frontend

参考资料

  • laravel 5.5

滋磁一下


以上是关于震惊,这篇文章竟然因为色情原因被删除 | laravel 5.5 相对 5.1 中的变动 的主要内容,如果未能解决你的问题,请参考以下文章

Umi 小白纪实—— 震惊!路由竟然如此强大!

震惊!NTP时钟服务器竟然还有这功能

震惊!星巴克分布式事务竟然没使用两阶段提交?

震惊!一蒟蒻竟然写出fhqTreap

震惊!这样终止线程,竟然会导致服务宕机?

震惊!JavaScript 竟然可以类型推断!