CakePHP ссылки не относительные - PullRequest
0 голосов
/ 07 мая 2010

В моем макете у меня есть меню, которое я включил в качестве элемента, и оно содержит ссылку примерно так:

<? $html->link('New Part Number','/part_numbers/add'); ?>

Проблема, которую я имею, в том, что торт не перенаправляетправильно, и это в конечном итоге отправляет меня на "http://localhost/part_numbers/add" вместо" http://localhost/my_client_folder/client_app/part_numbers/add" (я строю это локально).Мое приложение cakephp хранится в нескольких каталогах под моей папкой webroot, но я подумал, что cakephp автоматически определит способ создания ссылок независимо от того, где находится приложение, верно?

Так что мне нужно настроить корневую папку приложенияили создать маршрут или что-то?

Спасибо!

Ответы [ 4 ]

1 голос
/ 10 февраля 2012

Вы также можете использовать:

Router::url(array(controller => '', action => '', true))
1 голос
/ 07 мая 2010

Ваше решение ничем не отличается, если бы вместо array('controller', 'action').

было бы использовано URL-адрес, как в вашем примере. Решение состоит в том, чтобы поместить <base href="<?php echo 'http://'.$_SERVER['SERVER_NAME'].Router::url('/'); ?>" /> в ваши заголовки.

Это сделаетвсе ссылки (также теги src) относительно вашего webroot.Это не повлияет на URL-адреса JS / CSS!

1 голос
/ 07 мая 2010

В общем, я бы рекомендовал всегда всегда использовать обратную маршрутизацию в ваших представлениях и действиях контроллера в порядке дисциплины. По моему опыту, «умные URL» (например, / part_numbers / add) очень быстро ломаются, когда вы начинаете пытаться использовать какие-либо из расширенных функций маршрутизации.

Это также нарушает принцип написания кода один раз, много раз читая его - определение действия контроллера, вызванного простым маршрутом, таким как /part_numbers/add, может быть простым, но в более крупном приложении с кучей пользовательских маршрутов это становится намного Проще понять, какое действие будут вызывать ваши ссылки, если вы будете последовательно использовать массивы обратной маршрутизации.

1 голос
/ 07 мая 2010

Спасибо всем за ваши решения, мое предыдущее решение действительно было ошибочным:

Вы должны построить его из "$ this", чтобы он знал, откуда вы, иначе он не может понять, как создать относительную ссылку. Html-> link ("Новый номер детали", массив ('controller' => 'part_numbers', 'action' => 'add')); ?> НАСТОЯЩАЯ причина, по которой ссылки не работали, как любезно упомянуто ниже, была из-за не указания массива. Это должно работать, чтобы исправить ссылку:

<?= $html->link("New Part Number", array('controller' => 'part_numbers', 'action' => 'add')); ?>
...