Cakephp redirection interne de contrôleur à un autre contrôleur
Mise à jour: j'ai écrit quelques fausses déclarations à propos de l'utilisation de la tête dans php; donc, oubliez cette partie 🙂
Ce que je veux, c'est récupérer et afficher un contrôleur de la vue (avec le contrôleur de données) à partir d'un autre contrôleur, sans avoir le changement d'url dans le navigateur.
Quelques détails:
- Redirect ne pas faire le travail parce que c'est une redirection directe (via un navigateur)
- requestAction ne m'autorise pas à aller chercher le css et les images correctement
J'ai besoin de cette chose parce que j'ai un contrôleur de répartiteur qui redirige vers les autres contrôleurs.
Je pense que la seule (bon) la solution est d'utiliser routes.php dans /config avec Router::connect
et là, utiliser la logique qui a été dans le répartiteur contrôleur.
Interne "réécriture" se fait généralement avec des Itinéraires. Quel est si spécial à propos de votre "contrôleur de dispatcher" que vous ne pouvez pas faire la même chose en utilisant des routes?
comme vous l'avez dit, la solution est de faire de l'interaction entre la base de données et Itinéraires... mais je ne sais pas si c'est possible
Vous voulez obtenir des données à partir d'un Modèle affiché dans l'action d'un contrôleur à un autre modèle?
J'ai la même question, mais si j'utilise la fonction header() il va changer l'adresse web dans le navigateur. ce dont j'ai besoin: myapp.com/Basketball l'url doit charger le contenu de la page même que myapp.com/sports/display/basketball. Si j'essaie d'en-tête, il va charger le basket-ball, mais l'url également être modifié dans le navigateur. Tout à proposer?
comme vous l'avez dit, la solution est de faire de l'interaction entre la base de données et Itinéraires... mais je ne sais pas si c'est possible
Vous voulez obtenir des données à partir d'un Modèle affiché dans l'action d'un contrôleur à un autre modèle?
J'ai la même question, mais si j'utilise la fonction header() il va changer l'adresse web dans le navigateur. ce dont j'ai besoin: myapp.com/Basketball l'url doit charger le contenu de la page même que myapp.com/sports/display/basketball. Si j'essaie d'en-tête, il va charger le basket-ball, mais l'url également être modifié dans le navigateur. Tout à proposer?
OriginalL'auteur apelliciari | 2010-11-20
Vous devez vous connecter pour publier un commentaire.
ummm... header() est la fonction à utiliser pour une redirection, à moins que la documentation de PHP est mal. (http://php.net/manual/en/function.header.php) Le cœur de cakePHP utilise l'en-tête pour la redirection de la fonction (voir lignes 721 - 730 cake/libs/controller.php).
Donc je ne suis pas certain de ce que tu veux dire "comme d'habitude PHP". CakePHP est en PHP, il est juste de faire construire sur le code orienté objet. C'est pas de la magie ou tordu façons de faire les choses. Donc pour faire une redirection dans le gâteau, vous pouvez simplement utiliser:
Et il fera appel à la fonction header ().
Maintenant. Si vous êtes ensemble mort sur n'utilisant pas de redirection (peut-être que si vous allez à un site externe), vous pouvez appeler en-tête() dans le code. Juste être sûr que vous mettez le exit(); après l'en-tête d'appel:
Il fonctionnera tout de même que la redirection. C'est juste beaucoup d'inutiles de travail supplémentaire. Gardez à l'esprit que l'utilisation de redirection sera de maintenir le nom de domaine et de construire l'URL automatiquement pour vous.
Pour info, vous pouvez utiliser l'en-tête d'aller en chemins relatifs trop
OriginalL'auteur Chuck Burgess
En général, la connexion des Url pour les contrôleurs est le travail de routes. Si votre logique est plutôt complexe et la voie normale ne sera pas coupé, vous pouvez même écrire votre propre itinéraire analyseur de classe qui fait logique plus complexe (dans le manuel).
Si cette logique de routage implique des requêtes de base de données ou tout autre type de contrôleur de logique et peut conduire à des résultats très différents de sortie pour la même URL en fonction de certains états internes, même si vous êtes très Agité application et j'aimerais soumettre, vous devriez repenser ce que vous essayez de faire. Cela dit, vous pouvez rendre les consulter depuis n'importe quel contrôleur de l'action à l'aide de
$this->render()
. La logique du contrôleur pour chaque point de vue soit dans AppController ou peut-être (en partie) les modèles à être appelée à partir de n'importe où. Ainsi, au lieu de "redirection" vers un autre contrôleur, un itinéraire des routes à une action de contrôleur comme d'habitude, que l'action de façon dynamique les appels de code qu'il doit appeler, puis rend la vue, il doit rendre.Si vous voulez que votre application pour rester sur la même URL mais très différentes de contenu, vous devriez également regarder dans la fabrication d'une application AJAX.
La bonne solution pour vous, c'est probablement quelque part entre les deux.
OriginalL'auteur deceze