Laravel 4 - 设置路线

时间:2014-08-18 16:16:34

标签: laravel laravel-4 url-routing

我在我继承的网站上工作并且在路由到控制器时遇到了一些麻烦。

当我访问网址www.domain.com/banners/statistics时,它不会返回任何内容。

我还注意到,当我尝试通过横幅统计链接到此页面时,这也会在我的主页上出现错误。

routes.php文件

Route::resource('banners', 'BannerController');
Route::get('banners/{banners}/activate', 'BannerController@activate');
Route::get('banners/{banners}/deactivate', 'BannerController@deactivate');
Route::get('banners/{banners}/delete', 'BannerController@delete');
Route::get('banners/{banners}/preview', 'BannerController@preview');
Route::any('banners/{banners}/cropresize', 'BannerController@cropresize');
Route::get('banners/statistics', 'BannerController@statistics');

BannerController.php

public function create()
    {
        $data['title'] = 'Create Banner';
        $data['disciplines'] = Discipline::lists('name', 'id');
        return View::make('admin.banners.create', $data);
    }

    public function statistics()
    {
      return View::make('admin.banners.statistics');
    }

1 个答案:

答案 0 :(得分:2)

资源控制器为您提供多条路线。

包括:

GET /resource/{resource}重定向到控制器的show动作。

所有已创建路线的列表: http://laravel.com/docs/controllers#resource-controllers

所以当你打电话

  

横幅/统计

Laravel认为你想用“统计”作为参数来调用show动作。

为避免这种情况,您可以将所有自定义路由放在资源控制器路由之上。

Route::get('banners/{banners}/activate', 'BannerController@activate');
Route::get('banners/{banners}/deactivate', 'BannerController@deactivate');
Route::get('banners/{banners}/delete', 'BannerController@delete');
Route::get('banners/{banners}/preview', 'BannerController@preview');
Route::any('banners/{banners}/cropresize', 'BannerController@cropresize');
Route::get('banners/statistics', 'BannerController@statistics');
Route::resource('banners', 'BannerController');

这样,Laravel将在资源控制器创建的路由之前调用您的自定义路由。

如果您不需要某些资源控制器路由,也可以使用onlyexcept

Route::resource('banners', 'BannerController',
                array('except' => array('show')));