2009-12-08 7 views
-2

Je travaille sur la section admin d'un site utilisant Kohana. J'ai créé un sous-dossier "admin" dans le dossier views pour stocker les vues d'administration. J'utilise également une instance modifiée du contrôleur modèle pour la section d'administration appelé contrôleur de l'administrateur modèle, vu ici:Kohana - sous-dossiers dans le dossier des vues

abstract class Admin_Template_Controller extends Template_Controller 
{ 
    public $template = 'admin/template'; 

    public function __construct() 
     { 
      parent::__construct(); 

      $this->template = View::set_filename($this->template); 
      $this->template->css = 'adminstyles'; 
      $this->template->js = 'html5'; 
     } 
} 

Cependant, je reçois une erreur variable n'est pas définie css dans le « admin/template "fichier. À ce stade, le fichier de modèle est identique au fichier de modèle dans le dossier de vues que j'ai utilisé avec succès pour créer une grande partie du frontal, donc il n'est pas là. En outre, un fait important à noter, quand j'utilise le fichier de modèle dans le dossier de vues (pour le frontal) il charge la page correctement.

Cela me porte à croire que cela a quelque chose à voir avec le fichier modèle se trouvant dans un sous-dossier. Cela me laisse perplexe parce que je charge avec succès un autre fichier d'affichage du même dossier "views/admin". Ce fichier ne contient pas de variables, alors peut-être que c'est pour ça que ça charge.

J'ai essayé

$this->template = View::factory($this->template); 

Pour charger le nouveau fichier de modèle aussi, mais il renvoie une erreur que la vue doit être appelé avant le rendu. Je pense que c'est dû au rendu automatique, mais je le veux.

Toutes les idées seraient d'une grande aide. Évidemment, je pourrais déplacer le dossier hors du dossier d'admin et le renommer, mais cela ne va pas vraiment m'aider à apprendre ce qui se passe.

Répondre

0

J'ai trouvé la réponse à ma question. La ligne:

$this->template = View::set_filename($this->template); 

doit être retirée. Peut-être qu'il charge à nouveau le modèle et annule les variables. Je ne suis pas sûr exactement. Cependant, je pensais que cette ligne était nécessaire pour changer le nom de fichier du template qui était déjà défini dans le contrôleur de template que j'étendais. Je pensais lire correctement sur les forums Kohana. Je suppose que non. Espérons que cela aide quelqu'un d'autre.

2

Cette ligne que vous avez retiré:

$this->template = View::set_filename($this->template); 

rompait parce set_filename() n'est pas une méthode statique; cette méthode doit être appelée sur une instance existante d'une vue car la méthode retourne elle-même (utile pour le chaînage des méthodes). Cependant, vous n'avez pas besoin de faire cela en premier lieu parce que vous étendez la classe Template_Controller qui crée la vue de modèle pour vous dans le constructeur que vous appelez avec parent :: _ construct().

Vous n'auriez besoin d'utiliser la méthode set_filename() que si vous avez un objet template existant mais que vous souhaitez modifier la vue qui lui est associée sans avoir à recréer un objet entier. Enfin, l'option auto_render déclenche un hook post-contrôleur qui restitue la vue lorsque le contrôleur est terminé; cela n'aurait aucun effet sur le code à l'intérieur d'une méthode de la classe de contrôleur.

0

Les sous-dossiers de vue doivent être nommés exactement comme le contrôleur qui contrôle les vues dans le sous-dossier.