Problema caricamento boostrap di un modulo

Salve,

ho un applicazione strutturata in vari moduli:

/application/modules/Contact

/application/modules/Forum

ecc...

Ogni modulo ha il suo NameSpace: ho quindi impostato un file di bootstrap per definirlo.

/application/modules/Contact/bootstrap.php

Il problema è che non capisco come inizializzare correttamente il bootstrap, in quanto, nel costruttore, vuole un oggetto "application"..... ma come glielo passo, se il bootrap viene caricato in automatico?

Immagino ci sia da modificare il file application.ini , ma non capisco come....

Questo il file:

class Contacts_Bootstrap extends Zend_Application_Module_Bootstrap

{

    public function __construct()

    {       

    }

   protected function _initRun()

    {

    }

protected function _initAutoload()

    {   

$autoloader = new Zend_Application_Module_Autoloader(array(

            'namespace' => 'contacts_',

            'basePath'  => dirname(__FILE__),

        ));

        return $autoloader;

    }   

}

Che, messo così, da l'errore:

Fatal error: Declaration of Contacts_Bootstrap::__construct() must be compatible with that of Zend_Application_Bootstrap_Bootstrapper::__construct() in /application/modules/contacts/Bootstrap.php on line 2

.. consigli?

saluti,

davide

inviato 6 anni fa
Orix
Orix
1
X 0 X

Anche se non rispondo alla tua domanda direttamente, non sarebbe più semplice usare la struttura standard dei moduli?

Avresti un unico bootstrap ed eventualmente potresti usare un plugin per personalizzare alcune cose nel modulo.

Per esempio per caricare in automatico un modello da dentro la cartella model di un modulo puoi fare:

class New_Controller_Plugin_Module_Resource extends Zend_Controller_Plugin_Abstract  
{  
   public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)  
   {  
      $config = array(
         'basePath' => APPLICATION_PATH.'/modules/'.$request->getModuleName(),
         
         'namespace' => ucfirst(strtolower($request->getModuleName())),
         
         'resourceTypes' => array(
            'model' => array(
               'path' => 'models/',
               'namespace' => 'Model',
            )
         ),
      );
      $resourceLoader = new Zend_Loader_Autoloader_Resource($config);
      
      $autoLoader = Zend_Loader_AutoLoader::getInstance(); 
      $autoLoader->pushAutoloader($resourceLoader);  
   }
}

In questo modo nel controller puoi chiamare per esempio il model di un post così:

$model = new Blog_Model_Post
Dir: /application/modules/blog/model/Post.php
risposto 6 anni fa
Aft3rlif3
X 0 X

Salve a tutti sono un neofita di ZF!

Ho iniziato a combinare qualcosina, com il login e registrazione utente, ma mi sono subito fermato a un grande dilemma e quindi mi attacco a questa discussione dove credo c'entri molto!

Ma come è possibile che per utilizzare un model, una form o un controlloer devo necessariamente effettuare il  require? Non riesco a capire!

Anche creando una funzione statica in un controller non riesco a utilizzare quella funzione in altro controller se non effettuo il require di quel controller!!

Forse ho sbagliato in qualche tipo di configurazione?

index.php

http://pastebin.com/f17b80ea

Bootstrap.php

http://pastebin.com/f1595c75f

application.ini

http://pastebin.com/f26ec04ac

Vi prego di aiutarmi!

Saluti

risposto 6 anni fa
JellyBelly
X 0 X

Se registri il plugin che ho postato puoi richiamare modelli e form senza require, per la registrazione basta una riga tipo questa:

$Front_Controller->registerPlugin(new New_Controller_Plugin_Module_Resource());

Se vuoi richiamare anche i form puoi aggiungerli a resourceTypes:

'resourceTypes' => array(
   'form' => array(
      'path' => 'forms/',
      'namespace' => 'Form',
   ),
   'model' => array(
      'path' => 'models/',
      'namespace' => 'Model',
   ),
   'altro' => array(
      'path' => 'altro/',
      'namespace' => 'Altro',
   )
),

 :bye:

risposto 6 anni fa
Aft3rlif3
X 0 X

Se registri il plugin che ho postato puoi richiamare modelli e form senza require, per la registrazione basta una riga tipo questa:

$Front_Controller->registerPlugin(new New_Controller_Plugin_Module_Resource());

Se vuoi richiamare anche i form puoi aggiungerli a resourceTypes:

'resourceTypes' => array(
   'form' => array(
      'path' => 'forms/',
      'namespace' => 'Form',
   ),
   'model' => array(
      'path' => 'models/',
      'namespace' => 'Model',
   ),
   'altro' => array(
      'path' => 'altro/',
      'namespace' => 'Altro',
   )
),

 :bye:

Scusa l'ignoranza, ma cosa devo mettere e dove!!  :'(

risposto 6 anni fa
JellyBelly
X 0 X

Puoi aggiungere una riga al tuo ini del tipo:

resources.frontController.plugins.foo = "My_Plugin_Foo"

oppure nel tuo bootstrap.php aggiungi un metodo _initFronController():

protected function _initFrontController()
{
$Front_Controller = Zend_Controller_Front::getInstance();
$Front_Controller->registerPlugin(new New_Controller_Plugin_Module_Resource());
}
risposto 6 anni fa
Aft3rlif3
X 0 X

Puoi aggiungere una riga al tuo ini del tipo:

resources.frontController.plugins.foo = "My_Plugin_Foo"

oppure nel tuo bootstrap.php aggiungi un metodo _initFronController():

protected function _initFrontController()
{
$Front_Controller = Zend_Controller_Front::getInstance();
$Front_Controller->registerPlugin(new New_Controller_Plugin_Module_Resource());
}

E la classe "New_Controller_Plugin_Module_Resource" va dentro la directory controllers?

risposto 6 anni fa
JellyBelly
X 0 X

Il nome e la locazione la decidi da te, se vuoi usare l'autoloader devi rispettare le categorie:

New_Controller_Plugin_Module_Resource
New/Controller/Plugin/Module/Resource.php

Lib_Tuo_Nome
Lib/Tuo/Nome.php

...

altrimenti la metti dove vuoi e semplicemente la includi prima di usarla...

risposto 6 anni fa
Aft3rlif3
X 0 X

Il nome e la locazione la decidi da te, se vuoi usare l'autoloader devi rispettare le categorie:

New_Controller_Plugin_Module_Resource
New/Controller/Plugin/Module/Resource.php

Lib_Tuo_Nome
Lib/Tuo/Nome.php

...

Azz mi hai aperto un mondo, io sta cosa ancora non l'avevo capita!  :'(

Si vede che sono ancora un nubbio?? uhuahuaauh

Ok adesso che ho capito questo, qual'è la root?

Cioè dove metti la cartella New o Lib? dentro libray?

altrimenti la metti dove vuoi e semplicemente la includi prima di usarla...

risposto 6 anni fa
JellyBelly
modificato 6 anni fa
X 0 X

Il nome e la locazione la decidi da te, se vuoi usare l'autoloader devi rispettare le categorie:

New_Controller_Plugin_Module_Resource
New/Controller/Plugin/Module/Resource.php

Lib_Tuo_Nome
Lib/Tuo/Nome.php

...

altrimenti la metti dove vuoi e semplicemente la includi prima di usarla...

Azz mi hai aperto un mondo, io sta cosa ancora non l'avevo capita!  :'(

Si vede che sono ancora un nubbio?? uhuahuaauh

Ok adesso che ho capito questo, qual'è la root?

Cioè dove metti la cartella New o Lib? dentro libray?

risposto 6 anni fa
JellyBelly
X 0 X

Si in genere in library, ma ti consiglio di fermarti un attimo per capire prima come funziona lo zf, altrimenti sarai costretto a chiedere ogni riga di codice di cui avrai bisogno.

Con lo zf è difficile trovare o dare soluzioni già fatte, altri framework sono più rigidi e forse si adattano meglio al tuo modo di procedere nella costruzione dell'applicazione  O0

risposto 6 anni fa
Aft3rlif3
X 0 X

Si in genere in library, ma ti consiglio di fermarti un attimo per capire prima come funziona lo zf, altrimenti sarai costretto a chiedere ogni riga di codice di cui avrai bisogno.

Con lo zf è difficile trovare o dare soluzioni già fatte, altri framework sono più rigidi e forse si adattano meglio al tuo modo di procedere nella costruzione dell'applicazione  O0

Mi stai consigliando di abbandonare ZF?  :-\

risposto 6 anni fa
JellyBelly
X 0 X

Dovresti capire quali sono le tue esigenze, se sai cosa fare e vuoi un aiuto dal framework continua pure con lo ZF ma se preferisci che sia il framework a dirti cosa fare e quindi trovare soluzioni pronte all'uso penso che con lo ZF avrai dei problemi.

Io ho scelto lo zf quindi te lo consiglio, ma è necessario perdere del tempo nella sua comprensione, almeno degli aspetti di base come l'autoloader e mvc (sopratutto front controller, router, plugins, ecc.)  :bye:

risposto 6 anni fa
Aft3rlif3
X 0 X

Dovresti capire quali sono le tue esigenze, se sai cosa fare e vuoi un aiuto dal framework continua pure con lo ZF ma se preferisci che sia il framework a dirti cosa fare e quindi trovare soluzioni pronte all'uso penso che con lo ZF avrai dei problemi.

Io ho scelto lo zf quindi te lo consiglio, ma è necessario perdere del tempo nella sua comprensione, almeno degli aspetti di base come l'autoloader e mvc (sopratutto front controller, router, plugins, ecc.)  :bye:

E' appunto quello che voglio e che sto cercando di fare!

Non vado molto d'accordo con l'inglese e quindi confidavo in una community italiana un supporto, ma forse vi sto chiedendo troppo...

risposto 6 anni fa
JellyBelly
X 0 X

Mi sono sforzato di leggere un po di documentazioni partendo dai primi capitoli e rileggendo questa discussione mi è tutto molto più chiaro, ma credo che ci sia qualcosa che non va:

Esempio:

Ho modificato il mio bootstrap.php così:

    protected function _initAutoload()
    {
      $config = array(
         'namespace' => 'Default',
            'basePath'  => dirname(__FILE__),
      
         'resourceTypes' => array(
            'form' => array(
               'path' => 'forms/',
               'namespace' => 'Form',
            ),

            'model' => array(
               'path' => 'models/',
               'namespace' => 'Models',
            ),
         ),
      );
       
        $autoloader = new Zend_Application_Module_Autoloader($config);
        return $autoloader;
    }

Ho un modello chiamato così:

class Models_Users extends Zend_Db_Table {

Nel momento in cui vado ad instanziare il modello nel controller in questo modo:

   $users = new Models_Users ();

Nel momento in cui faccio scaturire l'azione del controller incriminato mi viene restituito quest'errore:

Fatal error: Class 'Models_Users' not found in /Users/iJellyBelly/Development/zendLogin/application/controllers/AuthController.php on line 21

Dove o cosa sbaglio???

risposto 6 anni fa
JellyBelly
X 0 X

Ti vorrei consigliare di leggere anche questa guida introduttiva:

http://akrabat.com/category/zend-framework/page/2/

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ti vorrei consigliare di leggere anche questa guida introduttiva:

http://akrabat.com/category/zend-framework/page/2/

Grazie mille! Me la leggo subito! ;)

risposto 6 anni fa
JellyBelly
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda