2010-07-28 1 views
0

Я только начал изучать cakephp и получил пример Blog, работающий, за исключением маршрутизации, я все еще не совсем уверен, как это работает после прочтения многих и многих документов по маршрутизации (в том числе в официальной кулинарной книге).проблема маршрутизации cakephp (или, может быть, просто путаница)

Моя проблема с корневой маршрутизацией «/», я хочу, чтобы перейти к функции индекса() в PostsController поэтому я использую:

Router::connect ('/', array('controller'=>'posts', 'action'=>'index')); 

Но это не работает, если я иду URL-адрес: локальный/

Это, вероятно, (наиболее определенно), потому что я не знаю, куда поместить папку cake_1_3/установка, в настоящее время дерево каталогов для локального хоста (в HTDOCS) выглядит следующим образом:

-htdocs> сообщения> cake_ 1_3

Это означает, что, когда я перейти к: LOCALHOST/ я ничего не получаю, и когда я перейти к: локальный/сообщений/ я ничего не получаю, просто листинг каталога для папки «сообщения», который показывает, что я есть каталог «cake_1_3».

Только тогда, когда я иду в URL: LOCALHOST/сообщения/cake_1_3/сообщений/ делает работу маршрутизации, как он видит вторые «сообщения» и так работает «индекс» функцию «PostsController» ,

Очевидно, это не то, что я хочу, я хочу, чтобы иметь возможность: localhost/posts/ и использовать функцию индекса PostsController. Обновление

: функция LOCALHOST/сообщений/сообщений/ для того, чтобы использовать индекс(): Я на самом деле пытался принимать все CakePHP вещи из «cake_1_3» и просто в «посты», но тогда я должен пойти of PostsController.

Есть ли способ, которым я могу просто перейти на localhost/posts/, и я получу функцию index() для запуска PostsController?

Я знаю, что это, вероятно, очень простая проблема, и я просто что-то пропустил, потому что я так устал (ну, во всяком случае, это мое оправдание), но я искал около 3 часов и не хотел ум руку помощи.

Спасибо за ваше время,

InfinitiFizz

P.S. Я только что понял, что могу сбросить все файлы/папки установки cakephp в корневой каталог (htdocs), а затем localhost/posts/ будет работать, но у меня есть множество различных тестовых сайтов в их собственных папках в htdocs/и так Я бы предпочел также, чтобы этот пост тестировал в своей собственной папке, а не все папки cakephp, смешанные со всеми папками других веб-сайтов.

ответ

2

Просто чтобы быть ясно, какие каталоги мы говорим, установка торт поставляется с этими папками:

/ 
    app/ 
    webroot/ 
    cake 

Вы должны попасть в верхний / каталог с помощью браузера, чтобы получить ответ от Cake на все.Все маршруты относятся к этому верхнему каталогу /.

Допустим, вы установили торт в вашем веб-сервере, так как:

/ 
    htdocs/ 
    someotherproject/ 
    mycakeapp/ 
     app/ 
     webroot/ 
     cake/ 

Каталог htdocs корень вашего веб-сервера. Если вы перейдете на http://localhost/, ваш веб-сервер будет отвечать содержимым /htdocs/. Это даже не вызывает Cake, поэтому Cake ничего не может направить.

Вам нужно будет открыть http://localhost/mycakeapp/, чтобы вызвать Торт. Оттуда Торт выполнит свою маршрутизацию. Путь торта Router::connect('/', …) соответствует URL http://localhost/mycakeapp/. Все маршруты Cake: относительно пути установки приложения. Маршрутизация торта - это приложение-внутренняя маршрутизация, она не соответствует абсолютному URL-адресу.

Если вы хотите, чтобы http://localhost/ был вашим приложением для торта, торт должен быть единственным приложением, расположенным в /htdocs/. У вас не может быть нескольких приложений в корневом каталоге, и все же есть одно из них - «корневое приложение» † ‡.

Для местных целей развития это должно быть прекрасно. При загрузке приложения на реальный сервер с реальным доменом вы обычно делаете его единственным и единственным.


† Ну вы мог, со сложными переопределениями-правилами, конфигурации виртуального хоста или путем размещения файлов в папке торта /app/webroot/. Обычно больше хлопот, чем того стоит, сохраняйте свои проекты отдельно.
‡ Вы не можете иметь свой торт и съесть его тоже. Зин

+0

Ах хорошо, я думаю, что я путаюсь с «/», то родственник, спасибо за большой ответ и веселый торт на основе каламбур :) –

+0

На самом деле жаль, что я до сих пор есть проблемы здесь. Если я перейду к «localhost/posts /», я перенаправляюсь к списку каталогов для «posts/app/webroot», а не туда, где, как я думал, я маршрутизирую. Я использую ту же маршрутизацию, что и в моем вопросе, для корневой папки '/', чтобы перейти к функции index() контроллера столбцов. Я думал, что это будет означать, что «localhost/posts /» принимает меня туда, но это не так, только «localhost/posts/posts /» делает. (В соответствии с вашим примером замените сообщения mywebapp как имя папки). Извините за отказ, но я только что осознал эту проблему. Спасибо за ваше время. –

+0

Это также означает, что когда я делаю ссылки «удалить» или «отредактировать», я перенаправляюсь в список каталогов «posts/app/webroot», и только когда я набираю «localhost/posts/posts /» снова, я вижу flash() «Сообщение было удалено», поэтому кажется, что моя проблема маршрутизации также перепутала перенаправление. Код перенаправления - это $ this-> redirect (array ('action' => 'index')); " Thanks, InfinitiFizz –