Laravel 5:内部呼叫路由

vca*_*llo 5 laravel laravel-5

在Laravel 5中,是否有办法在应用程序内部/编程方式调用路由?我已经为Laravel 4找到了很多教程,但我找不到版本5的信息.

erw*_*wan 9

使用laravel 5.5,这个方法对我有用:

$req = Request::create('/my/url', 'POST', $params);
$res = app()->handle($req);
$responseBody = $res->getContent();
// or if you want the response to be json format  
// $responseBody = json_decode($res->getContent(), true);
Run Code Online (Sandbox Code Playgroud)

资料来源:https: //laracasts.com/discuss/channels/laravel/route-dispatch

*注意:如果您尝试访问的路由具有身份验证中间件且您未提供正确的凭据,则可能会出现问题.为避免这种情况,请务必设置所需的正确标头,以便正常处理请求(例如Authorisation bearer ...).

  • 我正在尝试这种方法,但我无法获取在 $params 下发送的 POST 数据。 (2认同)

gec*_*kob 7

您实际上可以调用与该路由关联的控制器,而不是在内部“调用”该路由。

例如:

路由.php

Route::get('/getUser', 'UserController@getUser');
Run Code Online (Sandbox Code Playgroud)

用户控制器.php

class UserController extends Controller {

   public function getUser($id){

      return \App\User::find($id);

   };
}
Run Code Online (Sandbox Code Playgroud)

/getUser您可以实际调用UserController@getUser而不是调用路由。

$ctrl = new \App\Http\Controllers\UserController();
$ctrl->getUser(1);
Run Code Online (Sandbox Code Playgroud)

calling如果这就是您的意思,这与内部路线相同。希望有帮助

  • 对于正在寻找输入数据的路由,这将如何工作?即,POST 路由。 (3认同)

The*_*pha 6

你可以尝试这样的事情:

// GET Request
$request = Request::create('/some/url/1', 'GET');
$response = Route::dispatch($request);

// POST Request
$request = Request::create('/some/url/1', 'POST', Request::all());
$response = Route::dispatch($request);
Run Code Online (Sandbox Code Playgroud)

  • 从Artisan命令调用时,Route :: dispatch似乎无法正常工作!但是@erwan的答案在这种情况下效果很好:`$ response = app()-> handle($ request);` (2认同)