我正在设计一个模块,接受一个"通知请求",渲染它,然后通过电子邮件或短信发送它。经过几次hacky修改后,我意识到,我基本上是在向控制器发送请求,传递参数和渲染视图。
我打算做一些像
这样的事情 App\Sms\Controllers\UserController.php
。在其中我将getNewUser($user)
。我将捕获它的输出,并将其传递给我的SMS API。
我的问题是,通过Illuminate\Routing\Controller.php
的子类化,我需要注意一些消极的东西吗?
我能想到的一些例子包括必须隐藏/阻止这些路线被http命中。
我会用类似
的方式调用控制器$request = Request::create('api/items', 'GET', $params);
return Route::dispatch($request)->getContent();
答案 0 :(得分:0)
这正是命令总线的用途(不要与Artisan命令混淆)。 http://laravel.com/docs/5.0/bus
这些允许您从应用程序中的任何位置触发“命令”并相应地处理。
答案 1 :(得分:0)
直接调用Route::dispatch
会产生两个负面影响。
首先,您丢失了Route::getCurrentRoute()
,因此您无法找到您所在的网址。这对我来说是个大问题。
我最终做了
$this->router = new Router(app('events'), app());
$request = Request::create($url, 'GET');
Input::initialize($event->toArray());
$out = $this->router->dispatch($request)->getContent();
这样,我的getCurrentRoute不受影响。
其次,callstack变深 - 你可能达到100 xdebug限制 - Increasing nesting function calls limit