【问题标题】:Should I not use Laravel Controllers for non-http requests我是否应该将 Laravel 控制器用于非 http 请求
【发布时间】:2015-08-10 13:07:32
【问题描述】:

我正在设计一个模块,用于接收“通知请求”、呈现它并通过电子邮件或短信发送。经过几次修改后,我意识到,我基本上是在向控制器发出请求、传递参数并渲染视图。

我打算做类似的事情

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();

【问题讨论】:

    标签: php laravel laravel-5 laravel-routing


    【解决方案1】:

    这正是命令总线的用途(不要与 Artisan 命令混淆)。 http://laravel.com/docs/5.0/bus

    这些允许您从应用程序中的任何位置触发“命令”并相应地进行处理。

    【讨论】:

    • 我正在使用命令总线触发发送短信/电子邮件 - 但我仍然想解析“主题”和“消息”。
    • 不确定您的意思是什么?您不能直接将该信息传递到您发送它的命令中吗?
    • 我关注的部分是,从 /add-user-notification/userid 或 /delete-user-notification/userid 等路由获取命令的正确数据(在此如果是用户对象),并获得命令的正确视图,然后通过 SMS 或电子邮件发送数据。我应该(或者当我发生什么不好的事情时)使用 route::dispatch(/add-user-notifcation) - 还是直接 $smsMessageStore->getMessage('add-user-notification')。我希望这有助于澄清它
    【解决方案2】:

    直接调用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 不受影响。

    其次,调用堆栈变深 - 你可能会达到 100 xdebug 限制 - Increasing nesting function calls limit

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 2020-06-16
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多