0

大家好我是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                                           |                                                        |               |

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

4

2 回答 2

1

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

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

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

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

于 2013-09-18T09:19:16.543 回答
0

可能问题出在类自动加载问题上。所以跑,

composer dump-autoload

并且还尝试用其他东西替换你的路由中的类,比如slug

Route::get('{slug}', function($slug){
    Route::controller($slug,ucfirst($slug).'Controller@index');
})->where('slug', 'news|events|products|anotherclass');
于 2013-09-18T07:34:41.867 回答