我有一個CakePHP的網站有許多內部聯繫,即是建立一個與HtmlHelper
:如何在CakePHP中的HtmlHelper#鏈接(...)調用中不更改地重新定義URL生成?
/app/View/MyController/myaction.ctp
<?php
echo $this->Html->link(
$item['Search']['name'],
array(
'controller' => 'targetcontroller',
'action' => 'targetaction',
$profileId,
$languageId
)
);
?>
它工作正常使用默認的路由:
/app/Config/routes.php
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
生成的鏈接如下所示:/mycontroller/myaction/$profileId/$languageId
。
現在我想使用搜索引擎友好的網址(配置文件名稱和ISO-639-1語言代碼,而不是標識)的網站的一部分,並增加了新的途徑:
/應用/配置/routes.php
Router::connect(
'/:iso6391/:name.html',
array('controller' => 'mycontroller', 'action' => 'myaction'),
array(
'iso6391' => '[a-zA-Z]+',
'name' => '[0-9a-zA-ZäöüßÄÖÜ\-]+',
)
);
而且它也工作正常,像/producer/en/TestName.html
的進來的URI的正確解釋。
但是HtmlHelper
仍然生成舊的URI,如/mycontroller/myaction/1/1
。
的docu說:
反向路由是CakePHP的一個特點,就是用來讓你輕鬆改變你的URL結構,而不必修改所有的代碼。通過使用路由陣列來定義您的URL,您可以稍後配置路由,並且生成的URL將自動更新。
那麼,HtmlHelper
得到一個路由數組作爲輸入,這意味着:我使用反向路由。
爲什麼它不起作用?如何使HtmlHelper
生成新的URL(不需要更改HtmlHelper#link(...)
調用)?
謝謝你的回答,但是,正如你正確地說,這種解決方案「到最後,我還是要改變我調用Html-> link「。再次感謝,但這不是真正的解決方案。 – automatix
@automatix根本無法以某種方式修改你的'HtmlHelper :: link()'調用,因爲它直接傳遞適當的反向路由值,或者使用一個自定義的幫助器來轉換傳遞的選項或其他。 .. – ndm