Domanda

Ok, questo mi sta facendo impazzire!

Ho una struttura di directory come segue:

application
- modules
-- default
--- controllers
--- models
---- DbTable
---- Cachmapper.php
--- views

I miei sguardi file di configurazione come questo

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] =

L'applicazione sembra funzionare, se ci si dirige verso localhost, va correttamente al controller di indice. Ma, per qualche ragione si rifiuta di caricare qualsiasi modello.

Fatal error: Class 'Model_Cachmapper' non trovato in ............................... / applicazione / modules / default /controllers/IndexController.php sulla linea 26

idee?

Grazie

È stato utile?

Soluzione

Ecco una versione di lavoro (uno di loro, almeno), per ZF 1.10.x e, probabilmente, in precedenza, anche.

index.php

<?php
// Define path to application directory

defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

Application.ini - le parti pertinenti

autoloadernamespaces[] = Zend_
includePaths.library = APPLICATION_PATH "/../library"

; Where will Zend_Application find the Bootstrap file
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"

; Where are all the modules
resources.frontcontroller.moduledirectory = APPLICATION_PATH"/modules"
resources.modules[] = ""
; And which is the default module
resources.frontcontroller.defaultmodule = "default"

ed in applicazione / bootstrap.php

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

/**
 * Autoloader for the "public" module
 * 
 * @return Zend_Application_Module_Autoloader
 */
public function _initPublicAutoload()
{
    $moduleLoader = new Zend_Application_Module_Autoloader(
                            array(
                                'namespace' => '',
                                'basePath' => APPLICATION_PATH . '/modules/default'
                            )
                        );

    return $moduleLoader;
}
}

Altri suggerimenti

Sono un utente alle prime armi ZF, quindi questo non può essere 'corretto', ma non ho avuto problemi utilizzando modelli DB in questo modo. La mia struttura directory assomiglia a questo:

/
--/application
----/configs
----/controllers
----/forms
----/layouts
----/models
------/DbTable

Nella mia applicazione / public / index.php Ho il seguente codice:

...
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('Application_');

require_once 'Zend/Loader/Autoloader/Resource.php';
$resources = new Zend_Loader_Autoloader_Resource(array(
    'namespace' => 'Application',
    'basePath' => APPLICATION_PATH
));

$resources->addResourceType('form','forms','Form');
$resources->addResourceType('model','models','Model');
$resources->addResourceType('dbtable','models/DbTable','Model_DbTable');
...

Il mio spazio dei nomi applicazione è Application (se non si poteva dire). I miei modelli di database simile a questa (si trova nella applicazione / modelli / DBTable:

class Application_Model_DbTable_User extends Zend_Db_Table_Abstract
{

    protected $_name = 'User';
    protected $_primary = 'username';
}

class Application_Model_DbTable_WinLossTieScore extends Zend_Db_Table_Abstract
{

    protected $_name = 'WinLossTieScore';
    protected $_primary = 'id';
...
}

Inoltre, le porzioni pertinenti di applicazione / configs / Application.ini:

appnamespace = "Application"

includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

Vorrei aggiungere una classe di bootstrap per il modulo come altrimenti il ??caricatore modulo non sa su di esso.

class Default_Bootstrap extens Zend_Application_Module_Bootstrap
{
}

e conservare in applicazioni / default / bootstrap.php

http://akrabat.com/modules ha qualche info in più.

Aggiungi il tuo directory modelli per i vostri includePaths

ho:

includePaths.models = APPLICATION_PATH "/models"

Lo so, i vostri modelli si trova sotto i moduli, ma dovrebbe essere possibile fare in qualche modo. Forse in bootstrap invece di Application.ini

Att .: Rob

Ciao Rob,

Bene Sono confuso. Perché io in realtà comprato il vostro libro 'Zend Framework in azione'.

E nel bootstrap di applicazione dei 'luoghi' nel codice sorgente, si dispone quanto segue.

    set_include_path(get_include_path()
        . PATH_SEPARATOR . ROOT_DIR . '/library/'
        . PATH_SEPARATOR . ROOT_DIR . '/application/models/'
        . PATH_SEPARATOR . ROOT_DIR . '/application/forms/'
    );

    include 'Zend/Loader.php';
    Zend_Loader::registerAutoload();

so che la sorgente è scritto per una versione più vecchia ZF. La mia app corrente su cui sto lavorando è basato sulla Zend_Application, e se mi tolgo la cartella modelli dai miei includePaths, il caricatore non riesce a trovare i miei modelli.

Warning: include_once(Users.php) [function.include-once]: failed to open stream: No such file or directory in C:\Programmer\wamp\include\Zend\Loader.php on line 146
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top