Php 创建不在观察者中触发的模型事件
我有以下文件: ModelObserverProvider.phpPhp 创建不在观察者中触发的模型事件,php,laravel,events,eloquent,observers,Php,Laravel,Events,Eloquent,Observers,我有以下文件: ModelObserverProvider.php <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Models\User; use App\Models\Profile; use App\Observers\UserObserver; use App\Observers\ProfileObserver; class ModelObserverProvide
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Models\User;
use App\Models\Profile;
use App\Observers\UserObserver;
use App\Observers\ProfileObserver;
class ModelObserverProvider extends ServiceProvider
{
public function boot()
{
User::observe(UserObserver::class);
Profile::observe(ProfileObserver::class);
}
public function register()
{}
}
<?php
namespace App\Observers;
use App\Models\User;
class UserObserver
{
public function creating(User $user)
{
dd('Creating...');
// Hash the users password when creating.
$user->password = bcrypt($user->password);
// Create a new profile for the user.
$user->profiles()->create(['name' => 'guest-' . time()]);
}
}
试试这个
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Models\User;
use App\Models\Profile;
use App\Observers\UserObserver;
use App\Observers\ProfileObserver;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
User::observe(UserObserver::class);
Profile::observe(ProfileObserver::class);
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{}
}
因此,事实证明这是一个自定义名称间距,将所有内容替换回默认的应用程序名称空间解决了问题,我的观察者现在正在启动。@SeriousJelly如果这真的解决了问题,看起来您的服务提供商没有注册,正如我之前所说的。您可以运行php artisan cache:clear
、php artisan config:clear
和composer dumpauto
命令来解决此问题。每次创建服务提供商时,都应该在config/app.php
上注册它。@Chay22 OP将其添加到配置中,但似乎Laravel没有加载它是因为缓存数据。服务提供商正在加载,我在服务提供商内部添加了dd(),它正在加载,这是由于名称空间,更改回默认的应用程序名称空间。解决了所有问题后,我的服务提供商和观察员现在可以工作了