欢迎各位兄弟 发布技术文章
这里的技术是共享的
Comments -> 注释部分(
{{-- ... --}} 的写法,解析之后是 PHP 的注释而不是 HTML的注释
)
迁
<?php namespace App\Http\Controllers;
class Movie extends Eloquent { protected
1.建议新手至少先弄通golaravel上入门的文章(一)和(二),否则理解比较困难
我同意,模型事件非常酷,然而,有时候,你需要一些更高级的东西。
当你使用 Laravel 的时候,你基本上就是在使用面向对象编程,你可能需要做一些与模型事件相同的事,那就是模型观察者 — 一个模型事件的高级版本。
要使用它,你需要做的就是像下面这样声明一个新的类(可以放在一个叫做 observers 的专用文件夹中):
class BookObserver {
public function creating($book)
{
// I want to create the $book book, but first...
}
public function saving($book)
前面我们已经介绍完了事件模型,现在来看一个模型事件的实例。
我们以一个比较经典的例子开始。当一个新用户注册的时候,我们希望给他发一封欢迎的邮件。这个其实非常的简单。我们只需打开 EventServiceProvider 类,然后在 parent::boot() 方法后面添加下面的代码:
User::created(function($user){
Mail::send('emails.welcome', ['user' => $user], function($message) use ($user)
首先我们来看看这个被称为 模型事件(model events) 的技术。它的基本概念非常简单:
在 EventServiceProvider 中你可以添加一个特定的事件监听器,并绑定一个闭包函数
在闭包函数中,你不需要接触模型代码就可以添加新的行为
绑定操作必须放在类的 boot() 方法中
这是一个把创建 (created) 用户事件与闭包函数进行绑定的简单示例。闭包的 $user 参数包含了指定用户的实例:
public function boot(DispatcherContract $events)
parent::boot($events);
什么是事件?如果你在谷歌中搜索这个词,你会得到多个结果。例如,它会被定义为已经发生或被视为发生的一些事;一次事故,尤其是特别重大的。它也可以定义为发生在一段特定时期内特定地点的事。
我喜欢这两个定义,因为它们与我们的内容很符合。事实上,在某种意义上,你可以把这段特定的时期看作模型的生命周期。
你可以创建一个新的实例,更新现有实例,或删除它。你可以做的每个操作都涉及到两个事件。
从基础上来说:我刚刚创建了一条记录,我删除了那条记录,我正在更新那条记录,听起来很自然,对吗?
在当模型的生命周期中,当发生一些事的时候,Eloquent 会触发一些事件:
creating
created
updating
updated
saving
saved
deleting
deleted
restoring
restored
你是否听说过单一职责原则(single responsibility principle)
有时候我们需要在 Laravel 的 Blade 模版中定义一些变量,而 Blade 却没有提供这样的方法,所以我们这里为大家分享两种可以实现在 Blade 模版中定义变量的方法。
由于 Blade 模版中允许使用原生 PHP 代码,所以我们可以使用 PHP 语句来定义变量:
<?php $var = 'test'; ?>
{{ $var }}
除了上面的方法,我们还可以使用 Blade 的注释语法来定义/设置变量。由于在 Blade 中 {{-- 这里是注释 --}} 会被解析为 <?php /* 这里是注释 */ ?>,所以我们可以使用下面这样的语句来定义变量:
有时候在文章详情页需要实现显示 上一篇/下一篇 的功能。这个功能非常的常见,现在分享下如何在 Laravel 中实现这样的功能。
首先需要在 Controller 中显示文章的方法(如:show())中查询出上一条/下一条记录:
Laravel 提供了 Eager Loading 使用 with() 方法来缓解 N+1 的问题,但是在实际使用中还是存在一些问题的,with() 会直接查询出表中所有的字段,而我们可能仅仅需要其中指定的某几个字段。
假如我们现在有两张表:user 和 posts,每个 User 可以拥有多个 Posts,而每一篇 Post 只能属于一个 User。下面分别是 User Model 和 Post Model 中定义的关系:
Laravel 自带的认证系统中,登录时使用 email 与 password 来认证用户,其实 Laravel 提供了一个属性来替换默认的 email 字段,可以在 AuthController 中添加下面的属性即可实现:
protected $username = 'name'; // 数据库中字段的名称
此外,还需要修改登录视图中相应的字段名称。
可以在 /vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php文件中看到 loginUsername() 方法会优先查找该字段,如果没有设置的话,默认使用 email 字段。
在Laravel中,如果使用自带的认证系统,登录成功后默认是跳转到 /home 的,如果你想改变这个重定向 URI,可以在 AuthController 中添加一个属性来实现:
此外,如果登录失败的话,会默认重定向到 /auth/login ,这个重定向 RUI 也可以通过向AuthController 中添加一个属性来更改:
可以通过下面代码获取最近执行的SQL查询语句:
也可以通过事件监听的方法来获取:
Laravel使用PHP的一个扩展API–Carbon来处理时间。它提供了很多日期操作方法,其中diffForHumans() 可以把日期转换成 “1 hours age”、“4 years age” 这样的格式,同时,它还支持本地化,可以把其转换成中文形式的“1小时前”、“4年前”等。
可以在 app/Providers/AppServiceProvider.php 的 boot() 方法中添加下面的代码来设置全局本地化:
设置好之后,在输出时间的地方调用: