我不应该将Laravel控制器用于非http请求

时间:2015-05-28 07:09:52

标签: php laravel laravel-5 laravel-routing

我正在设计一个模块,接受一个"通知请求",渲染它,然后通过电子邮件或短信发送它。经过几次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();

2 个答案:

答案 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