有没有办法在 Laravel 4 中混合静态路由和动态路由?

Posted

技术标签:

【中文标题】有没有办法在 Laravel 4 中混合静态路由和动态路由?【英文标题】:Is there a way to mix static with dynamic routes in Laravel 4? 【发布时间】:2014-11-14 13:47:16 【问题描述】:

我想知道是否有一种方法可以指定静态路由,以及一种动态查找根级页面 url 的方法,我的 routes.php 文件中会出现如下内容

Route::get('admin/users', array('before' => 'isAdmin', 'uses' => 'UserController@userAdministration'));
Route::post('admin/users', array('before' => 'isAdmin', 'uses' => 'UserController@userList'));

Route::post('profile', 'UserController@profile');

Route::get('dynamic_page','PageController@getPage');

我该如何设置?

【问题讨论】:

【参考方案1】:

解决此问题的最佳方法取决于您尝试使用“动态”路线做什么。

您的路由可以正常工作,因为对 URL http://example.com/admin/usershttp://example.com/profile 的 GET 或 POST 调用将被路由到 UserController,而任何其他“根”级别的 GET(例如调用 http://example.com/some_page)将路由到PageControllergetPage 方法。从那里,您可以访问 dynamic_page 参数,并根据需要对其进行操作:

class PageController extends BaseController 
    public function getPage($dynamic_page) 
        // do something here with $dynamic_page:
        //
        // for example, return a view based on $dynamic_page
        //      return View::make($dynamic_page);
        //
        // or retrieve a row from the database based on $dynamic_page
        //      $page = new Page($dynamic_page);

    return ('The page is '.$dynamic_page);        
    

大概,在您的 PageController 中,您将需要对 $dynamic_page 做一些事情以确保有效的响应可用——通过 switch 语句运行它,也许,检查可用的视图,或查询数据库——否则返回一个NotFoundHttpException.

routes.php 中处理一些此类逻辑可能会更好——例如,要求 dynamic_page 满足某些要求——一个数字 ID,也许,通过添加

->where('dynamic_page', '[0-9]+');(正如上面乔尔建议的那样)。

另外请注意,您设置它的方式只接受“根级”通配符;带有附加参数(例如 http://example.com/some_page/something_else)的调用将失败,返回 NotFoundHttpException 和/或导致 404 错误页面。

【讨论】:

【参考方案2】:

我也不清楚你在问什么。但动态路由的示例如下(注意参数 customer_id 及其使用方式):

Route::get('customer_id/profile', 'CustomerController@getProfile')->where('customer_id', '[0-9]+');

根 url 路由可能如下所示:

Route::get('/', array('as' => 'root', 'uses' => 'RootController@showRoot'));

同样,我不完全确定您所说的“动态查找根 url”是什么意思。

【讨论】:

以上是关于有没有办法在 Laravel 4 中混合静态路由和动态路由?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 C 的同一个头文件中拥有静态原型和公共原型?

将 Auth 中间件应用于所有 Laravel 路由

Laravel 4:如何传递多个可选参数

如何通过 https 在 Laravel 5 中提供静态内容?

如何路由到 Laravel 中的静态文件夹

Laravel 4 和 AngularJS - 使用路由清理 URL