【问题标题】:Laravel 4 Custom RoutingLaravel 4 自定义路由
【发布时间】:2013-09-22 20:35:55
【问题描述】:

大家好,我是 laravel 的新手,我想问一个问题。 这是我的本地网址

/laravel-master/public/

我做了一些路由。

Route::resource('news', 'NewsController');
Route::resource('events', 'EventsController');
Route::resource('products', 'ProductsController');

这是 3 条路线正常工作。但是我不想用很多菜单重复我自己,所以我对代码进行了更改:

Route::get('{class}', function($class){
    Route::controller($class,ucfirst($class).'Controller@index');
})->where('class', 
    'news|events|products|anotherclass');

我遇到了这样的错误

ReflectionException 类 NewsController@index 不存在

其实NewsController确实存在,Index方法也确实存在:

class NewsController extends BaseController {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
        return View::make('page.news-event');
    }
}

我想用控制器页面处理 url {pagename}-page 并获取 pagename 参数

Route::get('{pagename}-page', function($pagename){
    Route::controller($pagename.'-page','PagesController@index');// where i can put the parameter page name?
});



class PagesController extends BaseController {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index($pagename='')
    {
        if($pagename=='about'){
            // do something
        }else if($pagename=='contact'){
            // do something
        }
        return View::make('page.about');
    }
}

php工匠路线:

|        | GET /{class}                                        |                                | Closure                                                        |                                                        |               |
|        | GET /{pagename}-page                                   |                                | Closure                                                        |                                                        |               |
|        | GET /                                               |                                | HomeController@index                                           |                                                        |               |

请帮忙。对不起我的英语不好。

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    您正在使用 'Classname@index' 在闭包中定义 RESTful 路由。

    如果您查看手册:http://laravel.com/docs/controllers#restful-controllers 你会看到你只需要指定类名,没有@和方法名。

    而且,我不确定它是否会按照您尝试的方式工作......

    如果您想重复资源的 url,请创建一个包含 url 和类名的 foreach 循环。在该循环中注册 Route::resource()。

    【讨论】:

      【解决方案2】:

      可能是类自动加载问题。所以跑吧,

      composer dump-autoload
      

      并尝试将路由中的 class 替换为 slug

      之类的其他内容
      Route::get('{slug}', function($slug){
          Route::controller($slug,ucfirst($slug).'Controller@index');
      })->where('slug', 'news|events|products|anotherclass');
      

      【讨论】:

      • 我已经这样做了。仍然无法正常工作。作曲家转储自动加载并更改变量名称。
      • 名称在 L4 中区分大小写。并且方法名称应该完全匹配(例如 getIndex)。
      猜你喜欢
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 2014-07-07
      • 2015-04-26
      • 2015-06-22
      相关资源
      最近更新 更多