In CakePHP, is het mogelijk om de interne en externe routes hebben?

stemmen
1

Een Facebook-app wordt gehost op mijn server in, zeg, http://server.com/projects/fbapp/ , maar wordt alleen maar gezien in Facebook op bijvoorbeeld http://apps.facebook.com/fbapp/ .

Met behulp van CakePHP dit een probleem - moet routes worden voorafgegaan door / project / fbapp of gewoon fbapp?

Het is een probleem omdat routes worden niet alleen gebruikt voor het routeren van inkomende verzoeken, maar ook voor het genereren van koppelingen (en vormen acties etc).

Als kludge, heb ik nu twee route-instructies per route:

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

Met de eerste niet verplichten tot een prefix als gevolg van een lijn die ik heb opgenomen om bootstrap.php:

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

Die kicks in bij het achteruit routing operaties.

Mijn vraag is of er een meer elegante manier om dit te doen? Dit lijkt erg lelijk en ik weet zeker dat het niet erg Cakey.

De vraag is gesteld op 13/05/2009 om 00:16
bron van user
In andere talen...                            


3 antwoorden

stemmen
1

Crosspost mijn commentaar op aanvraag:

Zou het niet een (apache) herschrijven van het verkeer van Facebook zijn de meest elegante oplossing? Uw interne machine zou alleen maar te maken met één pad, en als je wilde de app met een andere dienst / platform op een later tijdstip te integreren, zou je alleen maar naar een ander rewrite regel toe te voegen in plaats van het knoeien met de applicatie zelf.

antwoordde op 18/05/2009 om 03:44
bron van user

stemmen
1

Ik zal een keer te proberen, op basis van Vraag Apache en een aantal regels die ik heb in te voeren op een paar oude projecten. Ik denk dat deze in de .htaccess bestand in je webroot de truc zou doen (maar dat is een gok).

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

Het bovenstaande moet (als ik het goed gedaan hebben) herschrijven elk verzoek bijpassende http://server.com/projects/fbapp/pages/ * tot http://server.com/pages/ * ie http://server.com/ projecten / fbapp / pages / foo => http://server.com/pages/foo .

Bewerk Vond deze geplaatst in de sectie Apache.

antwoordde op 18/05/2009 om 21:38
bron van user

stemmen
1

U hoeft niet om iets te doen at all! Cake zal zorg dragen voor basis-URL voor u, zodat u niet nodig om de routes te dupliceren, noch zorgen voor de basis-URL. Wat u moet doen is om de route van uw relatieve URL in plaats van projects/fbapp/, of wat prefix u wilt verwerken:

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

Dat is hoe ik om met alle verzoeken in mijn app, die ik onder te zetten http://www.example.com, terwijl lokaal ik heb het onder http://localhost/workspace/example.com/trunk/deploy. Het werkt als een charme in beide omgevingen.

antwoordde op 22/05/2009 om 17:45
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more