Противоречие соглашению об именах Cakephp?

Я не понимаю следующее. В Книге они говорят:

Контроллеры с несколькими словами могут быть любой «измененной» формой, которая равна имени контроллера, поэтому:

/redApples
/RedApples 
/Red_apples 
/red_apples 

все будут разрешаться в индекс контроллера RedApples. Однако по соглашению ваши URL-адреса должны быть в нижнем регистре и подчеркнуты, поэтому /red_apples/go_pick — это правильная форма для доступа к действию RedApplesController::go_pick.

Но если я напишу это в представлении add.ctp

echo $this->Html->link('Add Red Apples',
                    array('controller' => 'RedApples', 'action' => 'add'),
                    array('class' => 'button'));

он создает этот вывод html:

www.site.com/RedApples/add

Итак, правильный способ доступа к RedApplesController::add — это /red_apples/add, но HTML-помощник CakePHP создает ссылки типа /RedApples/add? Как правильно писать свои собственные ссылки?

Спасибо.


person Shunsho    schedule 03.09.2014    source источник
comment
Несоответствие, похоже, заключается в использовании «контроллера» для имени ключа в массиве, поскольку значение воспринимается буквально как часть URL-адреса. Используйте 1_. Значение будет использоваться в URL-адресе и будет отображаться на контроллер с именем RedApples.   -  person George Cummins    schedule 03.09.2014
comment
@GeorgeCummins - значение не воспринимается буквально как часть URL-адреса - оно используется для создания URL-адреса и может / будет меняться в зависимости от маршрутов ... и т. д.   -  person Dave    schedule 03.09.2014
comment
Вы правы, джорджкамминс. Моя ошибка заключалась в том, что я использовал controller => RedApples (в качестве руководства), когда я могу использовать red_apples для принудительного соблюдения правильных соглашений. В любом случае, я предположил, что должен использовать имя контроллера (это RedApples!), а не подчеркнутую версию имени. Спасибо.   -  person Shunsho    schedule 03.09.2014


Ответы (1)


Я в замешательстве, в чем проблема.

  1. он говорит, что вы МОЖЕТЕ использовать любую форму
  2. вы используете форму, отличную от рекомендуемой
  3. он отображает форму, которую вы выбрали

В чем проблема? Тот факт, что он дает вам соглашение (но говорит, что он также принимает нетрадиционные), и вы решили не использовать соглашение, не приравнивается к проблеме IMO.

Может быть, я неправильно понимаю реальный вопрос?

Как правильно писать свои собственные ссылки?

«Правильный» способ — это способ, который вы копируете/вставляете из книги, где почти буквально сказано: «Правильный путь — это…».

Однако по соглашению ваши URL-адреса должны быть в нижнем регистре и с подчеркиванием, поэтому /red_apples/go_pick является правильной формой для доступа к действию RedApplesController::go_pick.

Если по какой-то неизвестной причине вы должны использовать «RedApples» (переменная, которую вы не можете изменить или что-то в этом роде?) в качестве имени вашего контроллера при создании ссылки, вы можете обернуть его в инфлектор:

$myController = 'RedApples'; //unable to change to 'red_apples' for some reason
//...
'controller'=>Inflector::tableize($myController)
//...
person Dave    schedule 03.09.2014
comment
Я не очень понял, что я знаю, что правильный путь - это подчеркнутая версия, но не понимаю, почему, если я использую контроллер => RedApples (это логика для меня, потому что это правильное имя контроллера), он создает ссылка вне соглашения. (/RedApples вместо автоматического /red_apples). На самом деле я не понял, как работает помощник html... так что спасибо за ваш ответ. - person Shunsho; 03.09.2014