如何在Laravel中从路径传递Request对象?

时间:2015-12-04 06:59:07

标签: laravel-5 request

以下是我在路线中直接呼叫控制器的路线。

如何将Request $request传递给我的getBlog函数..或者有没有办法在我的$request控制器函数中直接获取getblog对象??? / p>

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

路线中的代码:

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

});

2 个答案:

答案 0 :(得分:4)

你可以在routes.php文件的头部做:

use Illuminate\Http\Request; 

然后在你的路线开始:

Route::get('/{slug}', function($slug, Request $request) {

$ request将可供您使用。但这是非常糟糕的做法。你应该做的是 - 将整个逻辑移动到控制器中:

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

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

<?php namespace App\Http\Controllers\Front

use Illuminate\Http\Request; 

class ArticleController 
{ ...

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

 ....
}

答案 1 :(得分:0)

该请求是一个全局变量,您可以使用php代码甚至某些辅助Laravel函数访问它。

只需使用request(),这与通过函数将请求作为对象传递到变量内是相同的。 (等同于收到的Request $ request变量。)

它也提高了可读性。请记住,您不能直接更改请求对象,最好使用request()-> merge(['key'=>'newValue']);