从 laravel 中文文档查看 5.5 相对 5.1 中的变动 (1)
2017-10-02 tech php laravel 14 mins 3 图 4950 字
laravel 5.5也发布了一段时间了。 这是 laravel 第二个 LTS 版本,自然不能错过。实际上我也很少关注中间几个版本,并不了解它们增加了哪些东西。
趁着这个国庆把5.5的文档粗略看了一遍,以前对 laravel 多以应用为主,需要的时候才会去查,研究不算深,所以应该会有很多疏漏,或是错误,我也会不断修改过来,欢迎指正。
这篇主要对比一些基础性的不同,从 5.5 的目录来看是从前言
到前端开发
的内容。
下一篇在这里从 laravel 中文文档查看 5.5 相对 5.1 中的变动 (2)
当前本文的修改时间是2017-10-03 15:27:29
相同的部分我就不多赘述了,大部分只点出目前看到的不同的地方。
查阅的 laravel 手册为:
目录
刚开始看目录的时候,乍看之下觉得怎么多了这么多东西。实际上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
目录 - 「事务性」通知,
app\Notifications
目录
文档还给了一个更加详细的 Nginx 的配置案例,可以看一下。
核心架构
了解5.1的基本不用看了。毕竟核心架构也不可能有多大变化。
* 请求周期
* Container
* Provider
* Facades
* Contracts
基本功能
* 路由
* 中间件
* CSRF 保护
* 控制器
* 请求
* 响应
* 视图
* URL
* Session
* 表单验证
* 错误与日志
路由
路由方法
路由参照 RESTful API,实现了里边常用的请求类型(除了 head,用的少就没所谓了),5.1只实现了 get 和 post:
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
中间件,快速自定义应用程序信任的负载均衡器或代理,还可以配置代理发送包含原始请求信息的请求头:
<?php
namespace 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