【问题标题】:Laravel passing parameters to controller from routeLaravel 从路由向控制器传递参数
【发布时间】:2014-08-27 12:10:47
【问题描述】:

我正在为我的 Laravel 项目创建一个 API。我已将我的 API 身份验证直接包含在我的 route.php 文件中。验证通过后,我希望能够将我的 $api 参数传递给控制器​​本身以使用。正如您将在下面看到的,我在 Route:post 调用之后附加了 ->with() ,但这失败了。如何将 $api 传递给我的控件?

提前致谢!

Route::group(array('prefix' => 'api/1.0.0'), function()
{
    $api = Api::checkCredentials(Input::get('username'), Input::get('api_key'));

    if($api)
    {
        Route::post('beacons/fetch', 'ApiController@fetchBeacons')->with('api', $api);
    }
    else
    {
        return Response::json(array(
            'error' => true,
            'output' => 'Invalid API credentials'),
            200
        );
    }
});

【问题讨论】:

    标签: php laravel laravel-4 laravel-routing


    【解决方案1】:

    您可以使用before 过滤器,例如:

    Route::group(array('prefix' => 'api/1.0.0'), function()
    {
        Route::post(
            'beacons/fetch',
            array('before' => 'checkUser', 'uses' => 'ApiController@fetchBeacons')
        );
    });
    

    声明checkUser 过滤器将在route 被调度之前执行:

    Route::filter('checkUser', function($route, $request) {
    
        $inputs = Input::only(array('username', 'api_key'));
    
        $api = app('Api')->checkCredentials($inputs);
    
        if(!$api) {
    
            return Response::json(array(
                'error' => true,
                'output' => 'Invalid API credentials'),
                200
            );
        }
        else {
            Input::merge(array('api' => $api));
        }
    });
    

    现在,您可以使用以下命令访问控制器中的api:

    $api = Input::get('api');
    

    【讨论】:

    • 那么现在是否可以通过简单地键入 $api 在 ApiController@fetchBeacons 控制器中访问 $api 参数?
    • 检查更新的答案,Input::merge(array('api' => $api));。
    猜你喜欢
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2019-07-10
    • 2015-09-25
    • 2019-06-18
    • 2012-09-20
    • 2017-05-14
    相关资源
    最近更新 更多