如何从Laravel中的路由传递Request对象?

Sat*_*yay 1 request laravel-5

以下是我直接在路线中致电我的控制器的路线。

如何传递Request $request给我的getBlog函数。或者有什么方法可以直接$requestgetblog控制器的函数中获取对象?

$artObj = App::make('App\Http\Controllers\Front\ArticleController'); 
return $artObj->getBlog($id);
Run Code Online (Sandbox Code Playgroud)

路线代码:

Route::get('/{slug}', function($slug) {
    // Get Id and Type depending on url 
    $resultarray = App\Model\UrlAlias::getTypefromUrl($slug);
    if(!empty($resultarray)) {
        if($resultarray[0]['type'] == 'article') {
            $id = $resultarray[0]['ref_id'] ;
            $artObj = App::make('App\Http\Controllers\Front\ArticleController');
            return $artObj->getBlog($id);
        } else {
            return Response::view("errors.404", $msg, 400);
        }
    } else {
        return Response::view("errors.404", array(), 400);
    }

});
Run Code Online (Sandbox Code Playgroud)

nan*_*eri 5

您可以在routes.php文件的开头执行以下操作:

use Illuminate\Http\Request; 
Run Code Online (Sandbox Code Playgroud)

然后开始您的路线:

Route::get('/{slug}', function($slug, Request $request) {
Run Code Online (Sandbox Code Playgroud)

$ request将对您可用。但这是极其糟糕的做法。您应该做的是-将整个逻辑移入控制器,如下所示:

Route::group(['namespace' => 'Front'], function(){
   Route::get('/{slug}', 'ArticleController@methodName'); 
})
Run Code Online (Sandbox Code Playgroud)

然后可以在控制器类和控制器方法中使用Request类:

<?php namespace App\Http\Controllers\Front

use Illuminate\Http\Request; 

class ArticleController 
{ ...

   public function methodName(Request $request){
     ...function logic...
   }

 ....
}
Run Code Online (Sandbox Code Playgroud)