Bonjour,
Modifier les routes au niveau d'un Controller ne peut absolument pas
influer sur le Dispatcher, qui s'occupe de charger le Controller
spécifique en fonction de l'URL. L'instanciation et l'execution de
Dispatcher se fait avant même la création du Controller.
CakePHP utilise l'ordre suivant lors de son initialisation (en bref):
Création de Object Configure : lecture de config.php, bootstrap.php.
Création de Object Dispatcher : lecture de routes.php.
Chargement de l'App avec création de l'instance du plugin/controller
suivant les données de Dispatcher.
Création des instances des modèles indiqués par Controller::uses.
Execution de Controller::action().
De manière générale, on peut voir que l'accès aux modèles donc aux
tables se fait bien plus loin après la lecture des différentes
configurations.
Pour ce que j'ai compris, tu désires créer des routes dynamiques en
fonction d'une configuration basée sur SQL comme WordPress.
Bien que absolument pas "natif" il est possible cependant de charger
un modèle dans la partie bootstrap et routes via certaines fonctions
disponibles dans core.basics.
En effet la création de datasource (dbosource), donc par extension la
connexion SQL, se fait dès le début. Ainsi prenons exemple d'un modèle
de configuration :
<?php
// app/models/setting.php
class Setting extends AppModel {
var $name = 'Setting';
}
?>
On peut charger le modèle directement en tête du fichier bootstrap.php
par exemple via loadModel('Setting'); puis en créant l'instance via
$Setting=& new Setting();
Il est possible et recommandé d'enregistrer l'instance dans
ClassRegistry afin d'éviter de réinstancier le modèle lors d'une
utilisation ultérieure, par exemple sur le fichier routes.php.
<?php ClassRegistry::addObject('Setting', $Setting); // Ajout de
l'instance de Config dans le registre ?>
Et la magie se fait, toujours a la suite de bootstrap.php si on
execute $Setting->read(); la méthode retournera tous les résultats de
la table settings.
Enfin si on veut réutiliser le modèle par exemple dans routes.php il
suffit de faire $Setting = ClassRegistry::getObject('Setting'); pour
récupérer l'instance du modèle.
J'espère que ces informations seront utiles ...
On 6 jan, 14:15, foxmask <[EMAIL PROTECTED]> wrote:
> bonjour,
> ouais j'y avais songé :x
> je ne vois pas de solution sans "sortir" les parm de ma table dans un
> fichier de config...
> mais j'ai un soucis avec Configure:: comme je le disais plus haut ...
>
> merci de votre reponse.
>
> Cordialement.
>
> On 6 jan, 12:50, francky06l <[EMAIL PROTECTED]> wrote:
>
> > Le probleme est que beforeFilter est invoke APRES le checking du
> > routing. Les routes sont, je crois, testees par le dispatcher. La
> > methode que je vois (a premiere vue, en ne modifiant pas beaucoup le
> > code), serait de placer un redirect(); mais peut etre que cela va
> > generer des problemes .. (ie : beforeFilter sera appele a chaque
> > fois)...
> > A creuser ..
>
> > On Jan 3, 8:59 pm, foxmask <[EMAIL PROTECTED]> wrote:
>
> > > Dans routes.php je ne peux pas connaitre (à ce moment là) la route
> > > pour acéder à mon plugins par defaut
>
> > > Dans le controlleur principale de mon appli je lis la base de données
> > > pour trouver sur quel plugin par defaut pointé comme suit :
>
> > > app_controller.php :
>
> > > public function beforeFilter() {
> > > #definition des constantes
> > > $this->appInit->startup($this);
> > > #utilisation des constantes
> > > #ici un echo pt_default_module affiche 'news' !
>
> > > Router::connect('/',array('plugin'=>pt_default_module ,'controller'
> > > => pt_default_module, 'action' => 'index'));
>
> > > }
>
> > > mais j'obtiens l'erreur suivante :
>
> > > Missing controller
> > > You are seeing this error because controller Controller could not be
> > > found.
> > > Notice: If you want to customize this error message, create app\views
> > > \errors\missing_controller.ctp
> > > Fatal: Create the class below in file: app\controllers\controller.php
>
> > > <?php
> > > class Controller extends AppController {
> > > var $name = '';
>
> > > }
>
> > > ?>
>
> > > Ceci signifie que cakePHP ne connait pas la route par defaut que je
> > > viens de lui donner dans mon controlleur principale .
>
> > > au lieu de cette erreur j'attendais ca
>
> > > <?php
> > > class NewsController extends AppController {
> > > var $name = 'News';
>
> > > }
>
> > > ?>
>
> > > Pourriez vous me dire comment m'en sortir en me disant comment je peux
> > > faire pour indiquer à CakePHP de "router" la requete vers le bon
> > > plugin APRES avoir été lire dans la table settings de ma base de
> > > données ?
>
> > > ps : pour contourner le pb j'ai tenté de mettre les paramètres dans un
> > > fichier de config et gérer les valeurs avec Configure::read/write/
> > > store mais je me heurte au probleme evoque
> > > icihttp://groups.google.com/group/cakephp-fr/browse_thread/thread/50480e...
>
> > > merci de votre aide.
>
> > > Cordialement.
--~--~---------~--~----~------------~-------~--~----~
Groupe "Cakephp-fr".
Adresse : [email protected]
Pour résilier : [EMAIL PROTECTED]
Pour les options : http://groups.google.com/group/cakephp-fr?hl=fr
-~----------~----~----~----~------~----~------~--~---