Маршрутизация администратора CakePHP

Мне трудно понять эту административную маршрутизацию CakePHP. Из кулинарной книги:

«Вы можете сопоставить URL-адрес /admin с вашим действием admin_index контроллера страниц, используя следующий маршрут:»

Router::connect('/admin', array('controller' => 'pages', 'action' => 'index', 'admin' => true));

Что мне непонятно, так это "'admin' = true". Какова цель этого? Когда вы вызываете функцию выхода из системы, вы передаете аргумент "'admin' = false" функции перенаправления в AppController?

Когда вы используете несколько префиксов, используете ли вы «'manager' = true», если хотите включить префикс менеджера?


person hemppa    schedule 03.06.2013    source источник


Ответы (2)


admin=true в маршруте означает, что ваш URL имеет префикс /admin.

Таким образом, в вашем примере ваш маршрут /admin фактически подключается к: /admin/pages/index и обслуживается действием admin_index() в вашем контроллере страниц (в отличие от действия index() без префикса).

Вы можете либо убедиться, что все ссылки на выход созданы с помощью admin=false, чтобы они соответствовали стандартному действию Users::logout(), либо создать новое действие admin_logout(), которое обрабатывает выходы администратора.

Добавление manager=true к URL-адресу (вместе с соответствующей настройкой префикса) означает, что URL-адрес начинается с /manager и будет сопоставлен с manager_...() функциями в контроллере.

Вы можете использовать оба (или больше!) префикса, но не в одном и том же URL.

/pages/index соответствует: PagesController:index();

/admin/pages/index сопоставляется с: PagesController:admin_index();

/manager/pages/index соответствует: PagesController:manager_index();

person RichardAtHome    schedule 03.06.2013

Префиксы маршрутизатора

В CakePHP 2.x префиксы немного изменились.

Теперь у вас может быть несколько префиксов, но они должны быть объявлены в файле core.php.

Configure::write('Routing.prefixes', array('admin','api','json'));

Это объявило бы 3 префикса, и нет необходимости изменять таблицы маршрутизации, чтобы заставить их работать. Слово prefix означает, что оно ставится перед названием действия при отправке на контроллер.

Например;

class DocumentsController extends AppController
{
     public index() { ... }
     public admin_index() { ... }
     public api_index() { ... }
     public json_index() { ... }
}

CakePHP вызовет правильное действие, когда будет запрошен один из этих URL-адресов.

http://example.com/documents/index
http://example.com/admin/documents/index
http://example.com/api/documents/index
http://example.com/json/documents/index

Чего вы не можете сделать, так это использовать более одного префикса за раз. Следующее НЕ будет работать.

http://example.com/admin/json/documents/index

Это потребует пользовательской маршрутизации, потому что CakePHP не знает, какое действие вызывать.

Когда вызывается действие, вы можете указать префиксы в параметрах запроса.

public function beforeFilter()
{
   if(isset($this->request->params['admin']))
   {
        // an admin prefix call is being made
   }
}
person Reactgular    schedule 03.06.2013