2009-05-12 8 views
1

Eine Facebook-App wird auf meinem Server gehostet, z. B. http://server.com/projects/fbapp/, aber wird nur in Facebook bei, zum Beispiel http://apps.facebook.com/fbapp/.In CakePHP, ist es möglich, interne und externe Routen zu haben?

Mit CakePHP stellt dies ein Problem dar - sollten Routen mit "/ project/fbapp" oder nur "fbapp" vorangestellt werden?

Es ist ein Problem, da Routen nicht nur zum Weiterleiten eingehender Anfragen, sondern auch zum Generieren von Verknüpfungen (und Formularaktionen usw.) verwendet werden.

Als Flickschusterei, ich habe jetzt zwei Routing-Instruktionen pro Strecke:

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

Mit dem ersten wegen einer Zeile ein Präfix nicht erforderlich ich bootstrap.php aufgenommen haben:

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

Bei Reverse-Routing-Vorgängen tritt ein.

Meine Frage ist, ob es eine elegantere Möglichkeit gibt, dies zu tun? Das scheint sehr hässlich und ich bin mir sicher, dass es nicht sehr Cakey ist.

+1

Ich weiß, es ist irgendwie eine beschissene Antwort, aber was ist mit dem Ausführen von http://server.com:8080/fbapp/ stattdessen? – Justin

+0

Es ging mir durch den Kopf! Ich bin der Meinung, dass es genauso kludig/effektiv ist wie meine aktuelle Lösung. Ich denke, es ist akademisch, aber ich würde gerne eine elegante Lösung haben. –

+2

Wäre ein (Apache) Umschreiben von Traffic von Facebook nicht die eleganteste Lösung?Ihr interner Computer müsste nur mit einem Pfad arbeiten. Wenn Sie die App zu einem späteren Zeitpunkt in einen anderen Service/eine andere Plattform integrieren möchten, müssen Sie nur eine weitere Rewrite-Regel hinzufügen, anstatt sich mit der eigentlichen Anwendung zu beschäftigen. – jacobangel

Antwort

1

Sie müssen gar nichts tun! Cake kümmert sich um die Basis-URL für Sie, sodass Sie die Routen nicht duplizieren müssen und sich nicht um die Basis-URL kümmern müssen. Was Sie tun müssen, ist zu routen Ihre relative URL statt projects/fbapp/ zu verwenden, oder was auch immer Präfix Sie behandeln möchten:

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

Das ist, wie ich alle Anfragen in meiner app behandeln, die ich unter http://www.example.com bereitstellen, während lokal I habe es unter http://localhost/workspace/example.com/trunk/deploy. Es funktioniert wie ein Zauber in beiden Umgebungen.

1

Posting Cross my Kommentar auf Anfrage:

Wäre das nicht ein (Apache) Umschreiben des Verkehrs von Facebook sein die eleganteste Lösung? Ihr interner Computer müsste nur mit einem Pfad arbeiten. Wenn Sie die App zu einem späteren Zeitpunkt in einen anderen Service/eine andere Plattform integrieren möchten, müssen Sie nur eine weitere Rewrite-Regel hinzufügen, anstatt sich mit der eigentlichen Anwendung zu beschäftigen.

+0

Sie brauchen das nicht. Und nein, es wird nicht die eleganteste Lösung sein, denn wenn Sie nicht mit Apache arbeiten, wird es nicht funktionieren. In der Tat müssen Sie nichts tun; schau auf meine Antwort. – Seb

1

Ich werde gehen, basierend auf Ask Apache und einige Regeln, die ich auf ein paar alte Projekte eingerichtet habe. Ich denke, es würde den Trick in die .htaccess-Datei in Ihrem Webroot bringen (aber das ist eine Vermutung).

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

Die oben sollte jede Anfrage neu zu schreiben (wenn ich es richtig gemacht) http://server.com/projects/fbapp/pages/ * zu http://server.com/pages/ passende * d http://server.com/projects/fbapp/pages/foo =>http://server.com/pages/foo.

Bearbeiten Gefunden this posted in der Apache-Sektion.

+0

Sie brauchen dies nicht und außerdem, wenn Sie nicht mit Apache arbeiten, wird es nicht funktionieren. In der Tat müssen Sie nichts tun; schau auf meine Antwort. – Seb

Verwandte Themen