开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
Laravel 5.5 新特性预览 - 技术翻译 - 开源中国社区

Laravel 5.5 新特性预览 【已翻译100%】

标签: <无>
oschina 推荐于 3个月前 (共 24 段, 翻译完成于 09-08) 评论 20
收藏  
28
推荐标签: 待读

Laravel 5.5 需要 7.0+ 版本的 PHP。想要了解当前 PHP 版本所带来的功能,可以参考我们为你提供的回顾

Laravel 5.5 也将会是接下来的一个 LTS(长期支持)版本。 这就意味着它拥有两年修复以及三年的安全更新支持。Laravel 5.1 也是如此,不过它两年的错误修复支持将在今年结束。那么闲话少叙,让我们来看看这个新版本都提供了些什么吧。

LeoXu
 翻译得不错哦!

创建一个新的 Laravel 5.5 项目

我们可以通过运行以下命令安装 dev 版本:

laravel new laravel55 --dev
cd laravel55
php artisan key:generate

如果您不想使用 Laravel 安装程序,还可以使用 Composer

composer create-project --prefer-dist --stability=dev laravel/laravel:dev-master
cd laravel
php artisan key:generate

一旦我们访问了新设置的应用程序的主页,我们应该看到一个类似于我们以前的 Laravel 版本的欢迎页面。


总长
 翻译得不错哦!

在浏览器中渲染出邮件内容

我觉得这会是非常有用的东西。在 Laravel 之前的版本中,我们得实际去发送邮件,或者使用像 Mailtrap 这样的邮件客户端程序来测试邮件的布局,而这可不是啥好差事。时过境迁,有了 5.5 版本的 Laravel,局面得到改观,我们可以直接在浏览器调试邮件的布局显示。

    达成此目的的捷径就是:给我们当前的工程创建一个新的可实际去发送的邮件模板:

php artisan make:mail Welcome --markdown=emails.welcome

我喜欢用 markdown 的方式来创建模板,里面会附上一些现成的内容。我们打开 web.php 文件,然后创建一个测试路由来查看 email 的布局:

Route::get('/email', function () {
    return new App\Mail\Welcome();
});

        routes/web.php

通过浏览  /email 这个路由,我们就可以对 email 模板进行预览:

实际在幕后所发生的事情就是使用 Laravel 5.5, Mailable 类实现了拥有一个 render() 方法的 Renderable 协议。这个是 lluminate/Mail/Mailable.php 里面 render() 方法的实现:

public function render()
{
    Container::getInstance()->call([$this, 'build']);

    return Container::getInstance()->make('mailer')->render(
        $this->buildView(), $this->buildViewData()
    );
}

lluminate/Mail/Mailable.php

这个就是让获取一个视图成为可能的那个方法。我们尝试过返回一个类的示例,它并没有实现在我们的路由之中的那个 Renderable 协议,这时候会得到的是一个 UnexpectedValueException 被抛出来。

LeoXu
 翻译得不错哦!

自定义邮件主体

当邮件使用 Markdown 时,Laravel 会提供默认主题。 但是,有些人可能希望在电子邮件模板中使用自定义样式进行品牌推广。

要使用特定可用的自定义主题,我们首先创建一个包含我们想要的样式的自定义 .css 文件:

touch resources/views/vendor/mail/html/themes/custom.css

然后,我们将该文件名指定为 Mailable 类中的一个属性:

class Welcome extends Mailable
{
    protected $theme = 'custom';
    [...]
}

app/Mail/Welcome.php

这样,电子邮件布局将基于我们在 custom.css 文件中定义的样式。 这种方法的好处是不同的邮件使用不同的主题。

总长
 翻译得不错哦!

Exception 辅助函数

Laravel 5.5 带来了两个辅助函数,他们能帮助我们编写更富表达能力的代码。这两个辅助程序就是 throw_if 和 throw_unless 方法。两者都需要三个参数,而且第三个参数都是可选的。

让我们来看一下这些异常的各种不同的实现:

$number = 2;
throw_if($number !== 3, new NotThreeException('Number is not three'));
// or
throw_if($number !== 3, NotThreeException::class, 'Number is not three');

使用 throw_if 方法,异常会在第一个参数计算出来为 true 的时候被抛出。

实现 throw_unless 方法跟我们上面所做的并没有不同, 唯一的差别就是异常只会在第一个参数计算出来为 false 的时候被抛出:

$number = 2;
throw_unless($number === 3, new NotThreeException('Number is not three'));
// or
throw_unless($number === 3, NotThreeException::class, 'Number is not three');

例子并不是最好的,但足够来体现我们的展示意图了。

LeoXu
 翻译得不错哦!

介绍 migrate:fresh 命令

你可能发现自己处于需要重建数据库的境地。在以前的 Laravel 版本中,我们通过运行 php artisan migrate:refresh 命令来实现。migrate:refresh 命令基于针对每个迁移文件的 down 方法指定的内容回滚所有迁移,然后再次运行迁移:

但你可能数次遇到这个命令的问题,尤其是使用外键约束或者你的某个迁移中存在定义得不太好的 down() 方法。如果发生这样的事情,我们多数时候会手工删除产生问题的表 —— (可能通过 CLI 或 GUI)。这正是 migrate:fresh 能帮助我们的地方。这个命令删除所有表,然后再次运行已经存在的迁移:

边城
 翻译得不错哦!

JSON 型错误堆栈跟踪

虽然不是一个很大的变化,但是在之前的 Laravel 版本中,每次我们在构建 API 出错时,我们在一个 API 客户端(如 Postman)看到的是 HTML 标记。 在 Laravel 5.5 中,如果发生错误,我们会得到一个 JSON 型堆栈跟踪,而不是 HTML 标记,这看起来更加简单易用:

总长
 翻译得不错哦!

自动包发现

这些是我们遵循的步骤,以便在我们的 Laravel 项目中使用第三方软件包。

  • 安装包

  • 注册包服务的提供商

  • 如果有任何 facade 的话就注册

步骤看起来很简单。

通过自动软件包可以发现,我们只需要一个软件包即可开始使用包。 但是请注意,只有在软件包提供程序配置了自动发现的软件包时,才能生效。

无若
 翻译得不错哦!

看看 Laravel Debugbar 包,它已经更新了 autodiscovery,我们来看看 composer.json 文件的 extra 段:

"extra": {
    "laravel": {
        "providers": [
            "Foo\\Bar\\ServiceProvider"
        ],
        "aliases": {
            "Bar": "Foo\\Bar\\Facade"
        }
    }
}

包的供应者会更新有 extra 段的 composer.json 文件,然后指定供应者和包的别名。

第三方组件的自动检测功能(Automatic Package Discovery)的另一个好处是移除了某个依赖项之后不会造成破坏。一般来说,就算我们卸载了某个包,还有包服务的供应者,以及围绕在 config/app.php 文件周围的假象,这在某些情况会导致问题的发生。

有了包自动发现,如果某个包被 Composer 删除掉了,与这个包相关的东西都会被删除。

边城
 翻译得不错哦!

vendor 的改动:publish 命令

在之前的 Laravel 版本中,运行 vendor:publish 命令将发布包中所有的资源,并从框架本身中发布一些资源。发布的一些资源包括迁移、视图和配置。

使用 Laravel 5.5 之后,我们必须对运行此命令时要发布的内容有一些更明确的说明。如果我们运行在 php artisan vendor:publis 命令并不传递任何标志,我们将被提示选择提供商 vendor 或标签,以使其更容易仅发布我们想要的资源。见下面的截图:

我们可以通过在执行 publish 命令时指定 --all 或 --provider 标志来绕过该提示:

php artisan vendor:publish --all
Tocy
 翻译得不错哦!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
评论(20)
Ctrl/CMD+Enter

thinkphp是世界上最好的框架,没有之一��️

引用来自“老成有木有”的评论

thinkphp是世界上最好的框架,没有之一��️
:joy:
过度设计,臃肿不堪。。
永远在前进,这就是开源的力量!
性能怎么破
用了这么久,laravel的优雅我真没感觉出来,相反......
php怎么返回json数据?

引用来自“老成有木有”的评论

thinkphp是世界上最好的框架,没有之一��️

引用来自“jackchanxj”的评论

:joy:
:joy:

引用来自“老成有木有”的评论

thinkphp是世界上最好的框架,没有之一��️

引用来自“jackchanxj”的评论

:joy:

引用来自“np小强”的评论

:joy:
:joy:

引用来自“老成有木有”的评论

thinkphp是世界上最好的框架,没有之一��️
thinkphp 第三方有 laravel多? 模板引擎有 blead 好用? 你在找喷吧

引用来自“陨落人间”的评论

过度设计,臃肿不堪。。
Java 也是这样的啦 没办法 好用的东西 都会变成这样

引用来自“老成有木有”的评论

thinkphp是世界上最好的框架,没有之一��️

引用来自“彩虹梦”的评论

thinkphp 第三方有 laravel多? 模板引擎有 blead 好用? 你在找喷吧
laravel是世界上最好的框架,没有之一,这样你满足了吧

引用来自“老成有木有”的评论

thinkphp是世界上最好的框架,没有之一��️

引用来自“jackchanxj”的评论

:joy:

引用来自“np小强”的评论

:joy:

引用来自“哈哈爱兮爱兮乎乎”的评论

:joy:
:joy:
:clap:
其实精简的mvc就行了兄弟,其他的做成插件就行。
我用yii
表示用得很爽, 支持.

引用来自“陨落人间”的评论

过度设计,臃肿不堪。。
并没有
越来越臃肿
顶部