【问题标题】:Access Laravel route from controller or pass parameter to controller from route从控制器访问 Laravel 路由或从路由向控制器传递参数
【发布时间】:2013-08-15 01:29:10
【问题描述】:

我的图片库应用中有 4 条路线。它们都做同样的事情:查询数据库并渲染图片。它们之间的唯一区别是记录的顺序。例如:

http://example.com/favorites : shows pics ordered by favorites
http://example.com/random    : shows pics ordered by random
http://example.com/votes     : shows pics ordered by votes
http://example.com/views     : shows pics ordered by views

为此,我想在我的画廊控制器中使用 ONE 操作并将订单作为参数传递。

我知道我可以创建这条路线:

Route::get('/{orderby}', 'GalleryController@showPics')

然后从控制器获取参数:

class GalleryController extends BaseController
{
    public function showPics($orderby)
    {
        //query model ordering by $orderby and render the view
    }
}

问题是我不想捕获 example.com/whatever,只捕获这四个特定路线。

有没有办法将参数从路由传递给控制器​​动作。或者,或者,从控制器读取当前访问的路由?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您可以向路由添加参数约束,使用正则表达式限制可能的值,如下所示。

    Route::get('/{orderby}', 'GalleryController@showPics')
        ->where('orderBy', 'favorite|random|vote|view');
    

    如您所知,您将在映射的控制器操作中获得这些值:

    public function showPics($orderby)
    {
        dd($orderby); // favorite, random, vote or view.
    }
    

    您可以在文档中阅读有关参数路由约束的更多信息:http://laravel.com/docs/routing#route-parameters

    【讨论】:

    • 我的特殊问题是没有将变量传递给控制器​​方法,如:public function showPics($orderby) { .. }。我试图在方法中间接获取变量的值,如下所示:Input::get('orderby');这没有用。但是,您设置路线的方式对我也同样有效。
    猜你喜欢
    • 1970-01-01
    • 2021-01-28
    • 2019-07-10
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2012-09-20
    • 2017-05-14
    相关资源
    最近更新 更多