如何从Laravel路由向控制器传递额外的参数

时间:2015-10-24 21:42:13

标签: php laravel-5 laravel-routing

我试图在Laravel的路线中处理我的API调用的基本验证。这就是我想要实现的目标:

Route::group(['prefix' => 'api/v1/properties/'], function () {
     Route::get('purchased', 'PropertiesController@getPropertyByProgressStatus', function () {
       //pass variable x = 1 to the controller
     });

     Route::get('waiting', 'PropertiesController@getPropertyByProgressStatus', function () {
       //pass variable x = 2 to the controller
});

});

长话短说,取决于api / v1 / properties /后我想将不同参数传递给控制器​​的URI段。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

我能够使用以下route.php文件:

Route::group(['prefix' => 'api/v1/properties/'], function () {
    Route::get('purchased', [
        'uses' => 'PropertiesController@getPropertyByProgressStatus', 'progressStatusId' => 1
    ]);
    Route::get('remodeled', [
        'uses' => 'PropertiesController@getPropertyByProgressStatus', 'progressStatusId' => 1
    ]);
    Route::get('pending', [
        'uses' => 'PropertiesController@getPropertyByProgressStatus', 'progressStatusId' => 3
    ]);
    Route::get('available', [
        'uses' => 'PropertiesController@getPropertyByProgressStatus', 'progressStatusId' => 4
    ]);
    Route::get('unavailable', [
        'uses' => 'PropertiesController@getPropertyByProgressStatus', 'progressStatusId' => 5
    ]);
});

以及控制器中的以下代码:

公共函数getPropertyByProgressStatus(\ Illuminate \ Http \ Request $ request){

$action = $request->route()->getAction();
print_r($action);

几乎$ action变量将允许我访问从路径传递的额外参数。

答案 1 :(得分:0)

我认为您可以直接在控制器中执行此操作并将值作为路径的参数接收:

首先,您需要在控制器中指定参数的名称。

Route::group(['prefix' => 'api/v1/properties/'], function ()
{
    Route::get('{parameter}', PropertiesController@getPropertyByProgressStatus');

这样,getPropertyByProgressStatus方法将接收此值,因此在控制器中:

class PropertiesController{
....
public function getPropertyByProgressStatus($parameter)
{
    if($parameter === 'purchased')
    {
        //do what you need
    }
    elseif($parameter === 'waiting')
    {
        //Do another stuff
    }
....
}

我希望它有助于解决您的问题。

观看此课程:Learn LaravelCreate a RESTful API with Laravel

祝福。

-----------编辑--------------- 您可以重定向到所需的路线:

Route::group(['prefix' => 'api/v1/properties/'], function () {
     Route::get('purchased', function () {
       return redirect('/api/v1/properties/purchased/valueToSend');
     });

     Route::get('waiting', function () {
       return redirect('/api/v1/properties/waiting/valueToSend');
     });

    Route::get('purchased/{valueToSend}', PropertiesController@getPropertyByProgressStatus);
     });

    Route::get('waiting/{valueToSend}', PropertiesController@getPropertyByProgressStatus);
     });
});

最后两个路由响应重定向并将该值作为参数发送给控制器,我认为最接近路由的那个。