Subclassare Zend_Controller_Action

Eccomi qui a richiedere ancora aiuto :D

la cosa è abbastanza semplice: devo subclassare Zend_Controller_Action per evitare una certa ridondanza tra i vari controller del sito.

Visto che alcune operazioni di startup sono comuni a tutti i controller chiedo a qualcuno di voi se sà indicarmi come subclassare il controller action.

Più che il codice mi interessa la logica :D

questo è quello che la mia mente contorta ha ponderato:

->includo Zend_Controller_Action in un file contenuto nella cartella application/locale, qui estenderò Zend_Controller_Action in una classe mia ( Mio_Controller_Action )

->inserisco un costruttore che fa tutte le cosucce a me care.

->include il mio controller action nei vari controller e lo estendo

ho ragionato giusto?

 :bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Il ragionamento è corretto. Comunque non dimenticare di richiamare esplicitamente il metodo della classe padre se viene ridefinito nella classe figlio. Questo vale anche per il costruttore:

<?php
class padre {
   function __construct() {
      echo "Costruttore di Padre\n";
   }
}

class figlio extends padre {
   function __construct() {
      parent::__construct();
      echo "Costruttore di Figlio\n";
   }
}

$padre = new padre();
$figlio = new figlio();
?>

Se devi mettere delle istruzioni nel controller da eseguire ad ogni action puoi inserirle nel metodo init()

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Utilizzando il metodo Init mi ritroverei a ripetere determinate azioni per ogni file e poi per manutenerle ci metterei n (: numero di controller ) volte il tempo che ci metto a modificare il mio controller :D

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
<?php
class Controller_Action extends Zend_Controller_Action
{
   public function __construct()
   {
      parent::__construct();
      $viewRenderer = $this->_helper->getHelper('viewRenderer');
      $viewRenderer->setViewSuffix('php');
   }
}

Catchable fatal error: Argument 1 passed to Zend_Controller_Action::__construct() must be an instance of Zend_Controller_Request_Abstract, none given, called in C:\Programmi\Apache Softward defined in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\common\Zend\Controller\Action.php on line 123

invece

<?php
class Controller_Action extends Zend_Controller_Action
{
   public function __construct()
   {
      $viewRenderer = $this->_helper->getHelper('viewRenderer');
      $viewRenderer->setViewSuffix('php');
   }
}

Fatal error: Call to a member function getHelper() on a non-object in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\domains\blackroots.it\application\mod\controller\controller.php on line 6

Voglio semplicemente evitare di dover riscrivere  ( per ora ) quei due righi che settano il formato delle viste,  poi fa sempre comodo risparmiare righe di codice :P

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
modificato 9 anni fa
X 0 X

trovato il modo, spostato il codice nel metodo init() :D e sembra funzionare !

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
trovato il modo, spostato il codice nel metodo init() :D e sembra funzionare !

quando parlavo di usare il metodo init mi riferivo proprio a questo, cioè non sovrascrivere il costruttore ma init() in Controller_Action. 

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

eh lol non avevo capito :D

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda