Laravel: вложение контроллеров и перенаправление родительского контроллера на дочерние?

Это мой первый проект в Laravel, так что играйте со мной хорошо!

Цель - создать CMS. У каждой страницы будет свой собственный «слаг», поэтому, если я назову страницу This is a test, ее слаг будет this-is-a-test. Я хочу иметь возможность просматривать эту страницу, перейдя на example.com/this-is-a-test.

Чтобы сделать это, я предполагаю, что мне придется сделать что-то вроде:

Route::any('(:any)', 'view@index');

И создайте контроллер View с методом index. Все хорошо, верно?

Проблема в создании админки. У меня будет несколько страниц в этой области, несколько примеров: панель инструментов, страницы, настройки и инструменты. Поскольку все это подстраницы в админке, я подумал, что было бы уместно сделать их вложенными контроллерами, верно? Единственная проблема в том, что когда я посещаю /admin, я хочу напрямую показать панель инструментов (/admin/dashboard). Я бы предпочел просто вызвать контроллер панели управления вместо перенаправления на /admin/dashboard с контроллера администратора. Это возможно?

Итак, чтобы проиллюстрировать, что я имею в виду:

example.com/admin -> loads admin.dashboard
example.com/admin/dashboard -> also loads admin.dashboard

Вот все мои маршруты:

Route::get('admin', array('as' => 'admin', 'use' => 'admin.dashboard@index'));
Route::get('admin/dashboard', array('as' => 'admin_dashboard', 'use' => 
Route::any('/', 'view@index'); // Also, should this be below or above the admin routes? This route will show the actual cms pages.'admin.dashboard@index'));

А вот мой контроллер admin_dashboard:

class Admin_Dashboard_Controller extends Base_Controller {

    public $restful = true;    

    public function get_index()
    {
        return 'in dashboard';
    }

}

Контроллер представления просто отображает ссылку на страницу администратора, которая работает. Я просто не могу понять, что не так с маршрутами администратора? Когда я перехожу к /admin или admin/dashboard, я просто получаю пустую страницу, а не 404. Если я перехожу к admin/blah или просто blabla, я получаю 404, поэтому я знаю, что что-то происходит, просто это происходит неправильно. Я что-то упускаю?


person qwerty    schedule 07.11.2012    source источник
comment
Возможно ли, что у вас отключен отчет об ошибках PHP?   -  person TaylorOtwell    schedule 08.11.2012


Ответы (1)


Я неправильно понял соглашения об именах для контроллеров.

Вот как это было было:

controllers
    admin
        admin_dashboard.php   Containing controller Admin_Dashboard_Controller

Предполагается, что это:

controllers
    admin
        dashboard.php         Containing controller Admin_Dashboard_Controller

Другими словами, я не должен был добавлять «admin» в начало имени файла контроллера. Теперь все работает нормально.

На самом деле я также смог минимизировать код маршрутизации:

Route::get(array('admin', 'admin/dashboard'), array('as' => 'admin', 'uses' => 'admin.dashboard@index'));
person qwerty    schedule 08.11.2012
comment
Спасибо за ваш пример! Вот документы для людей из будущего: laravel.com/docs/controllers#nested-controllers - person Michael J. Calkins; 28.02.2013