Zend_application : problemi caricamento models

Salve,

ho un problema nel ri-configurare un sito gestito con lo ZF, usando il nuovo Zend_Application

http://framework.zend.com/manual/en/zend.application.html

Il problema è che non riesco a far caricare tutte le classi di supporto che ho inserito in /application/models

Allora, la mia applicazione ha la seguente struttura:

index.php

.htaccess

/application

   /modules

      /default

      /admin

      /news

   /models

   /library/

        /Zend

  /configs/

        /application.ini

   Bootstrap.php

In index.php :

$RealPath = realpath(dirname(__FILE__)).'/application';
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',$RealPath);

$LibraryPath = dirname(dirname(__FILE__)) . '/httpdocs/application/library';

set_include_path(implode(PATH_SEPARATOR, array(
    $LibraryPath,
    get_include_path(),
)));

$ModelsPath = dirname(dirname(__FILE__)) . '/httpdocs/application/models';

set_include_path(implode(PATH_SEPARATOR, array(
    $ModelsPath,
    get_include_path(),
)));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

/** Zend_Application */

require_once 'application/library/Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

nel file bootstrap.php  ho aggiunto in un metodo di "supporto":

self::$frontController->addModuleDirectory(APPLICATION_PATH.'/models');

se metto un parametro sbagliato (es: /modelszzz) viene subito generato un errore, quindi non credo sia un problema di percorsi.... anzi, si, ma non trovo l'errore...  >:(

Qualche suggerimento, che ci sto sbattendo la testa parecchio?

Saluti,

Davide

inviato 7 anni fa
Orix
Orix
1
X 0 X

ma il metodo addModuleDirectory non credo serva a definire la cartella dei Models  ???

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Visto che stai usando Zend_Application, per caricare automaticamente il Models puoi usare il Zend_Application_Module_Autoloader, così come spiegato qui:

http://framework.zend.com/docs/quickstart/create-a-model-and-database-table

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Ciao,

grazie, ho aggiunto nel bootstrap.php il codice:

public static function initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Default',
            'basePath'  => dirname(__FILE__),
        ));
        return $autoloader;
    }

e poi ho rinominato le varie classi in

Default_Model_NOMECLASSE

e la cosa adesso funge.. :-)

Certo che rispetto a prima è tutto diverso... in bene, ovviamente....

Un altra domanda, sullo Zend Layout, implementato con il startMvc().

Allora, se ho capito bene la metodologia "Two step view" io definisco un template principale e, usando

<?= $this->layout()->content; ?>

inietto il contenuto della view associata alla action del controller corrente.

Quindi, se la view corrente contiene un bel <b>Hello world!</b> mi aspetto che venga visualizzato "Hello World"... ma non è così! Mi sfugge qualcosa?

saluti,

Davide

risposto 7 anni fa
Orix
Orix
1
X 0 X

Si va in OT... :police:

P.S.: mi sa che se usi Zend_Application non hai bisogno di startMvc()

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

...mmm....  faccio un altro post per il problema con lo zend layout?

risposto 7 anni fa
Orix
Orix
1
X 0 X

Buon pomeriggio a tutti.

Anche io ho lo stesso problema, ma la soluzione proposta non funziona nel mio caso. Sto utilizzando Zend Framework 1.8.3 ed ho creato l'albero delle directory utilizzando il tool fornito.

Nel file public/index.php ho aggiunto al path la directory dei models:

set_include_path(implode(PATH_SEPARATOR, array(
   realpath(APPLICATION_PATH . '/models'),
    realpath(APPLICATION_PATH . '/../../library'),
    get_include_path(),
)));

Nel Bootstrap.php ho aggiunto:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
   {
      protected function _initAutoload()
          {
              $autoloader = new Zend_Application_Module_Autoloader(array(
                  'namespace' => 'Default_',
                  'basePath'  => dirname(__FILE__),
              ));
              return $autoloader;
          }
   }

Ed nel file del model, nel mio caso User.php il nome della classe l'ho cambiato in

class Default_Model_User
   {
      ...
   }

Quando creo un oggetto del model utilizzo

$user = new User();

L'errore dice Class 'User' not found .

Dove sbaglio? Ho saltato qualche passaggio?

Ciao

Elia

risposto 7 anni fa
eliacontini
X 0 X

Ciao,

avevo lo stesso problema: bisogna settare il "percorso" per le singole classi.

Se prima avevi la classe User, adesso la classe deve chiamarsi Default_Model_User.

Vedi risposta sotto:

Ciao, grazie, ho aggiunto nel bootstrap.php il codice:   public static function initAutoload()     {         $autoloader = new Zend_Application_Module_Autoloader(array(             'namespace' => 'Default',             'basePath'  => dirname(__FILE__),         ));         return $autoloader;     } e poi ho rinominato le varie classi in Default_Model_NOMECLASSE

Saluti,

Davide

risposto 7 anni fa
Orix
Orix
1
X 0 X

Ciao Davide,

grazie per la risposta rapidissima!

Ancora però non mi va. Vediamo se ho capito:

Il file User.php lo rinomino Default_Model_User.php.

La classe al suo interno da class User la rinomino con Default_Model_User

Quando creo l'oggetto utilizzo $user = new User();

Seguendo questo schema ho ancora l'errore.

Dove sbaglio? Ormai ho il fumo che mi esce dalle orecchie e non vedo l'errore :-)

risposto 7 anni fa
eliacontini
X 0 X

Eh, no: se l'oggetto si chiama

Default_Model_User

il nuovo oggetto lo creerai con:

$User = new Default_Model_User();

:-)

Ciao Davide,

grazie per la risposta rapidissima!

Ancora però non mi va. Vediamo se ho capito:

Il file User.php lo rinomino Default_Model_User.php.

La classe al suo interno da

class User
la rinomino con
Default_Model_User

Quando creo l'oggetto utilizzo

$user = new User();

Seguendo questo schema ho ancora l'errore.

Dove sbaglio? Ormai ho il fumo che mi esce dalle orecchie e non vedo l'errore :-)

risposto 7 anni fa
Orix
Orix
1
X 0 X

Grazie! Ti devo una birra!

Pensavo che funzionasse alla stesso modo degli helper per le view.

Errore strabanale :-[

Ciao!

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