В CakePHP возможно ли иметь внутренние и внешние маршруты? - PullRequest
1 голос
/ 13 мая 2009

Приложение Facebook размещено на моем сервере, скажем, http://server.com/projects/fbapp/,, но оно просматривается только в Facebook, например, http://apps.facebook.com/fbapp/.

Использование CakePHP представляет проблему - должны ли маршруты иметь префикс "/ project / fbapp" или просто "fbapp"?

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

Как кладж, у меня теперь есть две инструкции по маршрутизации на маршрут:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('projects/fbapp/pages/*', array('controller' => 'pages', 'action' => 'display'));

Первый не требует префикса из-за строки, которую я включил в bootstrap.php:

Configure::write('App.base', '/fbapp');

Который включается во время операций обратной маршрутизации.

У меня вопрос: есть ли более элегантный способ сделать это? Это кажется очень уродливым, и я уверен, что это не очень Cakey.

Ответы [ 3 ]

1 голос
/ 19 мая 2009

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

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^/projects/fbapp/pages.*
RewriteRule ^/projects/fbapp/pages/(*)$ /pages/$1 [L]

Выше следует (если я все сделал правильно) переписать любой запрос, соответствующий http://server.com/projects/fbapp/pages/* до http://server.com/pages/*, т.е. http://server.com/projects/fbapp/pages/foo => http://server.com/pages/foo.

Редактировать Найдено это опубликовано в разделе Apache.

1 голос
/ 22 мая 2009

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

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

Вот так я обрабатываю все запросы в своем приложении, которое я развертываю в http://www.example.com, в то время как локально у меня это в http://localhost/workspace/example.com/trunk/deploy. Это работает как очарование в обеих средах.

1 голос
/ 18 мая 2009

Перекрестная отправка моего комментария по запросу:

Разве (apache) переписывание трафика с Facebook не будет самым элегантным решением? Ваша внутренняя машина будет иметь дело только с одним путем, и если вы захотите позднее интегрировать приложение с другим сервисом / платформой, вам нужно будет только добавить другое правило перезаписи, а не связываться с самим приложением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...