Gow*_*raj 12 model observers laravel
当为模型观察者使用单独的类时,我应该在哪里注册观察者?文档说要打电话,User::observe(new UserObserver);但我不知道最好的地方在哪里.
Tom*_*ler 21
由于观察者只是您正在收听的事件的集合,我会说它放在Laravel建议您放置单个事件的地方:boot模型本身的方法.
class User extends Eloquent
{
public static function boot()
{
parent::boot();
User::observe(new UserObserver);
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里UserObserver上课更灵活,取决于它最终会变得多么复杂.
如果您每次运行应用程序时都无法加载它,请创建一个app/observers.php文件,然后将其放在app/start/global.php:
require app_path().'/observers.php';
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用composer通过附加以下内容自动加载该文件composer.json:
{
"autoload": {
"classmap": [
//...
],
"files": [
"app/observers.php"
]
}
}
Run Code Online (Sandbox Code Playgroud)
如果你计划有许多不同的观察者,我会说创建你自己的命名空间,让Laravel/Composer为你做自动加载.为了做到这一点,创建一个像这样的文件夹app/MyNamespace/Observers,然后将每个观察者文件放在其中(每个名称与类完全相同 - 即UserObserver.php).
你的UserObserver.php课现在应该是这样的:
<?php
namespace MyNamespace\Observers;
class UserObserver
{
public function saving($model)
{
// ...
}
public function saved($model)
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
每当你使用它时,你必须声明完整的类:
User::observe(new MyNamespace\Observers\UserObserver);
Run Code Online (Sandbox Code Playgroud)
要么:
use MyNamespace\Observers\UserObserver;
class User extends Eloquent
{
public static function boot()
{
parent::boot();
User::observe(new UserObserver);
}
}
Run Code Online (Sandbox Code Playgroud)
最后,编辑composer.json并添加命名空间以遵循PSR-0自动加载:
{
"autoload": {
"classmap": [
//...
],
"psr-0": [
"MyNamespace": "app/"
]
}
}
Run Code Online (Sandbox Code Playgroud)
PS:composer dump-autoload编辑后不要忘记运行composer.json.
| 归档时间: |
|
| 查看次数: |
5256 次 |
| 最近记录: |