我有一个设计疑问,我想分享。
我在Laravel中有一个模型,在检索:
时有一个Observerclass MailingObserver
{
public function retrieved($mailing)
{
// we retrieve HTML content from disk file
$mailing->setAttribute('content', \Illuminate\Support\Facades\Storage::disk('mailings')->get("{$mailing->id}-{$mailing->slug}.html"));
$mailing->syncOriginal();
}
}
检索存储在纯文本而不是数据库中的属性。
该网站是多品牌平台,因此每个登录用户的磁盘(' mailings')都不同。根据当前登录的用户,此配置将加载到中间件中。
到目前为止一切都很好。
现在问题"。我有一个控制器注入实体邮件:
class MailingCrudController extends CrudController
{
/**
* Sends the mailing
* @param Request $request
* @param \App\Mailing $mailing
*/
public function send(Request $request, \App\Mailing $mailing)
{
// WHATEVER
}
}
注入模型后,检索 Observer方法被触发,但中间件仍未执行,因此 mailings 磁盘仍未设置。
我不知道如何更改此顺序:首先执行middleare,然后执行模型注入。
一种方法
我尝试在AppServiceProvider中添加:
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
$middleware = new \App\Http\Middleware\CheckBrandHost();
$middleware->setBrandInformation(request());
$middleware->loadBrandConfig(request()->get('brand.code_name'));
}
您会批准此解决方案吗?哪些问题会对我造成影响?这是正确的方法吗?
全部谢谢!