Противоречие в конвенцията за именуване на Cakephp?

Не разбирам следното. В Книгата те казват:

Множеството контролери на думи могат да бъдат всяка „склонена“ форма, която е равна на името на контролера, така че:

/redApples
/RedApples 
/Red_apples 
/red_apples 

всички ще се разрешат до индекса на контролера RedApples. Конвенцията обаче е, че вашите URL адреси са с малки букви и подчертани, следователно /red_apples/go_pick е правилната форма за достъп до действието RedApplesController::go_pick.

Но ако напиша това на add.ctp view

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, но CakePHP html помощникът създава връзки като /RedApples/add? Кой е правилният начин да пиша собствени връзки?

Благодаря ти.


person Shunsho    schedule 03.09.2014    source източник
comment
Несъответствието, изглежда, е в използването на „контролер“ за името на ключа в масива, тъй като стойността се приема буквално като част от URL адреса. Използвайте array('controller' => 'red_apples'...). Стойността ще се използва в URL адреса и ще се съпостави с контролера с име RedApples.   -  person George Cummins    schedule 03.09.2014
comment
@GeorgeCummins - стойността не се приема буквално като част от URL адреса - използва се за създаване на URL адреса и може/ще се променя в зависимост от маршрутите... и т.н.   -  person Dave    schedule 03.09.2014
comment
Прав си georgecummins. Грешката ми беше, че използвах контролер =› 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