【问题标题】:Sub request in Laravel 5Laravel 5 中的子请求
【发布时间】:2017-08-13 19:10:45
【问题描述】:

我希望在我的 API 中对我的 API 的其他部分执行子请求。我以前在 Symfony 中做过这个 - 但我不确定如何在 Laravel 中实现这个。

$url = route('some.route', ['param' => $val]);
$request = Request::create($url, 'get', []);
Route::dispatch($request);

似乎总是无法提供类似

的东西
Class api does not exist

所以我试过了

app()->handle($request);

这可行,但会处理请求,但我无法处理引发的任何异常(例如,应用层处理它并引发 html 响应时的验证)

Handle 具有 HttpKernelInterface 的签名,因此可以获取子请求的属性并捕获异常 - 但这些不被使用....

...->handle($request, HttpKernelInterface::SUB_REQUEST, false);

是否可以在 Laravel 中执行此操作而无需发送实际的 http 请求?

谢谢

【问题讨论】:

  • 它看起来像糟糕的设计。如果你一直在实现这个,你应该看看 GraphQL。另一种方法是将逻辑从控制器转移到专用类(看看服务模式)。它将使您能够在不处理其他伪请求的情况下调用某些逻辑。

标签: php laravel laravel-5 routing request


【解决方案1】:

所以在深入研究框架之后,这种方式似乎是不可能的,因为它将一些值存储为静态值,并且它们没有通过dipatch() 方法更新。

所以我创建了这个包来处理设置和重新应用原始值。

https://github.com/myerscode/laravel-sub-request

【讨论】:

  • 参考包实现是否会处理与转发/新子请求特别相关的中间件?
  • 嗨@jitendra 抱歉回复晚了。是的,应该应用您发送子请求的路由的中间件。我在包中添加了一个单元测试来显示这一点。
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 2017-11-15
  • 2023-03-14
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 2018-04-17
  • 2015-07-06
相关资源
最近更新 更多