如何升级laravel5.4到laravel5.5并使用新特性?

简介:

如何升级laravel5.4到laravel5.5并使用新特性?

修改composer.json:

"laravel/framework": "5.5.*",

"phpunit/phpunit": "~6.0"

scripts增加:

        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover"
        ]

执行composer update -vvv

新特性1: 扩展包自动发现

为扩展包增加了一个自动发现功能。

以barryvdh/laravel-debugbar为例,先删除这个包。composer remove barryvdh/laravel-debugbar

136188-20171023234627519-1875875714.jpg

先把APP里面的Barryvdh\Debugbar\ServiceProvider::class,去掉。

就删除成功了。

再重新安装:

我们看github上这个包最新版的
Installing barryvdh/laravel-debugbar (v3.1.0): Downloading (100%)

里面的包的composer.json有这么一个说明:

"extra": {
        "branch-alias": {
            "dev-master": "3.0-dev"
        },
        "laravel": {
            "providers": [
                "Barryvdh\\Debugbar\\ServiceProvider"
            ],
            "aliases": {
                "Debugbar": "Barryvdh\\Debugbar\\Facade"
            }
        }
    },

我们看到,在bootstrap/cache/packages.php里面已经写上了debugbar,并且我们在页面上也可以看到有debugbar的存在。但是我们并不需要在app.php里面增加debugbar的serviceProvider了。非常方便!!!

就是说,我们引入的包里面,只要有这个extra.laravel的说明,后面的providers和alias会自动增加到框架中去。

新特性2: api resources

这个特性的功能就是把资源直接作为api返回给前端,并且进行需要的包装。

这里的resource就是返回资源,我们可以创建这么一个返回资源,这个资源会被包装在data字段中,json,api返回。

比如创建一个PostCollection资源。代表文章集合。

php artisan make:resource PostCollection

我希望返回的api里面有两个字段:data和meta,data代表的就是文章集合,meta代表的是一些附属的元数据信息。

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class PostCollection extends ResourceCollection
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request
     * @return array
     */
    public function toArray($request)
    {
        return parent::toArray($request);
    }


    public function with($request)
    {
        return [
            'meta' => [
                'site' => 'laravel55',
            ],
        ];
    }
}

在路由中:

Route::get('/api/posts', function () {
    return new \App\Http\Resources\PostCollection(\App\Post::all());
});

并且在\App\Post中重新定义toArray()

public function toArray()
    {
        return [
            "id" => $this->id,
            "title" => $this->title,
        ];
    }

那么这个时候就返回了:

136188-20171023234732613-1101718611.jpg

有人说,其实laravel中在控制器中直接返回对象也就是调用它们的toArray方法,那么如果你把上式的路由修改为:

Route::get('/api/posts', function () {
    return new \App\Http\Resources\PostCollection(\App\Post::paginate(3));
});

你就感觉到增加这个"api resource"的方便性了:统一API返回结构,并且让你少写了很多代码。

特性3: command能自动注册

我们之前自定义的Command需要在Console\Commands\Kernel.php中写上每个Command:

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\ESInit::class
    ];

现在,不用了,只修改commands函数:

protected function commands()
    {
        $this->load(__DIR__ . '/Commands');

        require base_path('routes/console.php');
    }

特性4:验证规则类

这个规则是为了我们的自定义验证规则。比如,我们的登录,需要邮箱后缀为gmail.com才能登录。那么这个时候我们就需要定义一个验证规则类:

php artisan make:rule ValidLoginEmail

我们在App\Rules文件夹下面看到ValidLoginEmail类:

class ValidLoginEmail implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        $strs = explode("@", $value);
        if (count($strs) == 2 && $strs[1] == "gmail.com") {
            return true;
        }
        return false;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return '邮箱必须是gmail结尾';
    }
}

然后再修改loginController的login()的验证部分:

$this->validate(request(),[
            'email' => ['required', new ValidLoginEmail(), 'email'],
            'password' => 'required|min:5|max:10',
            'is_remember' => 'integer'
        ]);

效果:

136188-20171023234831473-608339696.jpg

新特性5: request增加了validate方法

还是login方法,我们也可以这样写:

    public function login(Request $request)
    {
        // 验证
        $request->validate([
            'email' => ['required', new ValidLoginEmail(), 'email'],
            'password' => 'required|min:5|max:10',
            'is_remember' => 'integer'
        ]);

不再需要使用
$this->validate(request(),[
这样做的好处是更语义化了:验证请求符合下列规则...

新特性6: 自定义Exception增加了render和report方法

在以前,我们自定义一个Exception类,要想这个异常单独处理,就需要在Handler.php里面的render方法这么写:

public function render($request, Exception $exception)
    {
        if ($exception instanceof \App\Exceptions\ForbiddenException) {
            return response()->view("exceptions/forbidden");
        }
        return parent::render($request, $exception);
    }

这样自定义异常定义多了,这个函数就非常冗余。

现在的方法就是,在自定义异常里面定义一下render方法就行

<?php
namespace App\Exceptions;

class ForbiddenException extends \Exception
{
    /**
     * Report the exception.
     *
     * @return void
     */
    public function report()
    {
        //
    }

    /**
     * Report the exception.
     *
     * @param  \Illuminate\Http\Request
     * @return void
     */
    public function render($request)
    {
        return response()->view("exceptions/forbidden");
    }

}

新特性7: 增加了Route::view方法

如果你这个路由什么逻辑都没有,只是渲染一个模版,那么就很适合使用这个方法。比如创建文章页面:

原先:

Route::get('/posts/create', '\App\Http\Controllers\PostController@create');


    // 创建页面
    public function create()
    {
        return view("post/create");
    }

现在:

// 创建文章
    Route::view('/posts/create', 'post/create');

这个功能大赞,能让人少写很多代码。

更多5.5新特性请看:
https://laravel.com/docs/5.5/releases




本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/7719893.html,如需转载请自行联系原作者

相关文章
|
8月前
|
开发框架 关系型数据库 PHP
Laravel
Laravel 是一款基于 PHP 的 Web 应用程序开发框架,它具有简洁、优雅的语法,强大的功能,以及丰富的组件,让开发者能够快速、高效地开发出功能丰富、性能优良的 Web 应用。要用 Laravel,首先需要安装 Laravel。
94 2
|
4月前
|
缓存 小程序 中间件
laravel5.8(一)安装及部署
Laravel,传说中美丽优雅的框架。之前一直在使用国产的thinkphp框架,可能是万物发展到最后都会统一吧,thinkphp的功能与laravel是越来越统一了 thinkphp5.1也加入了laravel一直存在的中间件功能。 但是相对来说laravel还是比较高端,入门比较容易,但是想要完全搞清楚,还是比较难,之前了解的也比较少。 高端的东西多少还得了解点。 一:安装框架 安装大概有两种方式 1:composer安装(网好的时候进行) 修改 composer 的全局配置文件(推荐方式),然后输入安装命令 bash 复制代码 composer config -g repo.packagi
49 0
laravel5.8(一)安装及部署
laravel练习03
laravel练习03
92 0
laravel练习01
laravel练习01
106 0
|
SQL 前端开发 程序员
Laravel和Thinkphp有什么区别,哪个框架好用
Laravel和Thinkphp有什么区别,哪个框架好用
694 0
|
PHP
【laravel】安装
【laravel】安装
115 0
【laravel】安装
Laravel-orWhere 条件式
Laravel-orWhere 条件式
1692 0
|
PHP 开发工具 Android开发
基于umeng官方php sdk v1.4,支持Laravel5以及Lumen5
安装 composer require zzl/umeng Laravel 5.* 配置 打开config目录下的app.php文件,找到provider,添加如下代码: 'provider' => [ Zzl...
1719 0
|
PHP Apache
laravel日常操作
1、创建user表 php artisan make:migration create_users_table --create=users 2、创建控制器(同时创建model) php artisan make:controller PhotoCo...
989 0