Another way is simply to create an entry in your bootstrap:
protected function _initDoctrine()
{
$this->bootstrap("autoload");
$dbConfig = $this->options['db'];
defined('CONFIG_PATH') || define('CONFIG_PATH',
APPLICATION_PATH . '/configs');
defined('DATA_FIXTURES_PATH') || define('DATA_FIXTURES_PATH',
CONFIG_PATH . '/data/fixtures');
defined('SQL_PATH') || define('SQL_PATH',
CONFIG_PATH . '/data/sql');
defined('MIGRATIONS_PATH') || define('MIGRATIONS_PATH',
CONFIG_PATH . '/migrations');
defined('YAML_SCHEMA_PATH') || define('YAML_SCHEMA_PATH',
CONFIG_PATH . '/schema.yml');
defined('MODELS_PATH') || define('MODELS_PATH',
APPLICATION_PATH . '/models');
defined('DB_PATH') || define('DB_PATH' ,
'mysql://' . $dbConfig['username']. ':' . $dbConfig['password']. '@' .
$dbConfig['host']. '/' . $dbConfig['name']);
require_once 'Doctrine.php';
spl_autoload_register(array('Doctrine', 'autoload'));
$connection = Doctrine_Manager::connection(DB_PATH);
$connection->setCharset('UTF8');
Doctrine_Manager::getInstance()->setAttribute('model_loading',
'conservative');
Doctrine::loadModels(MODELS_PATH);
}
and then add Doctrine_ as a namespace:
$autoloader->registerNamespace(array('Doctrine_', 'App_'));
and include them in your include paths:
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
APPLICATION_PATH . '/models',
APPLICATION_PATH . '/models/generated',
get_include_path(),
)));
this works for me... although its not a total separation, it works fine for
my purposes.
On Thu, Jul 9, 2009 at 1:32 PM, Matthew Ratzloff
<[email protected]>wrote:
> At my company I ended up creating a Doctrine integration class with a
> couple of special methods:
> class My_Doctrine
> {
> /**
> * Recursively (and lazily) load all models from a directory or
> * array of directories.
> *
> * @param string|array $directory Models directory or directories
> */
> public static function loadModels($directory);
>
> /**
> * Returns a table object, used for retrieving sets of records.
> *
> * @param string $className Class name
> * @param Doctrine_Connection $connection (Optional) Database
> connection (default: null)
> * @return Doctrine_Table
> */
> public static function getTable($className, $connection = null);
> }
>
> -Matt
>
>
> On Thu, Jul 9, 2009 at 10:15 AM, swilhelm <[email protected]> wrote:
>
>>
>> I would really like to see an example of Doctrine integrated as a module
>> as
>> well.
>>
>> - Steve W.
>>
>>
>> dbroderick wrote:
>> >
>> > I am using ZF 1.8.4 and Doctrine 1.1.2 with a module directory setup of
>> >
>> >
>> > +---application
>> > | +---configs
>> > | \---modules
>> > | +---default
>> > | | +---controllers
>> > | | \---views
>> > | | \---scripts
>> > | | +---error
>> > | | \---index
>> > | +---error
>> > | | +---controllers
>> > | | \---views
>> > | | \---scripts
>> > | | \---error
>> > | \---user
>> > | +---controllers
>> > | +---models
>> > | | \---generated
>> > | \---views
>> > | \---scripts
>> > | \---index
>> > +---library
>> > | \---App
>> > | \---Application
>> > | \---Resource
>> > +---public
>> > | +---images
>> > | \---themes
>> > | \---default
>> > | \---css
>> > \---tests
>> > +---application
>> > \---library
>> >
>> >
>> > I have a resource file called Doctrine.php in my library folder which
>> does
>> > the following:
>> >
>> >
>> > $zla = Zend_Loader_Autoloader::getInstance();
>> > $zla->unshiftAutoloader( array( 'Doctrine', 'autoload' ), 'Doctrine'
>> > )->setFallbackAutoloader( true );
>> >
>> >
>> > $manager = Doctrine_Manager::connection( $this->_getConnectionString()
>> );
>> > $manager = Doctrine_Manager::getInstance();
>> > $manager->setAttribute( Doctrine::ATTR_MODEL_LOADING,
>> > Doctrine::MODEL_LOADING_CONSERVATIVE );
>> > $manager->setAttribute( Doctrine::ATTR_PORTABILITY,
>> > Doctrine::PORTABILITY_NONE );
>> > $manager->setAttribute( Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true );
>> > $manager->setAttribute( Doctrine::ATTR_USE_DQL_CALLBACKS, true );
>> > $manager->setAttribute( Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true );
>> >
>> >
>> > My config xml file has this:
>> >
>> >
>> > --- snip ---
>> >
>> >
>> > <pluginPaths>
>> >
>> >
>> <App_Application_Resource><![CDATA[App/Application/Resource]]></App_Application_Resource>
>> > </pluginPaths>
>> > <resources>
>> > <frontController>
>> >
>> <defaultmodule><![CDATA[default]]></defaultmodule>
>> > <params>
>> >
>> <prefixDefaultModule><![CDATA[true]]></prefixDefaultModule>
>> >
>> >
>> <usedefaultcontrolleralways><![CDATA[false]]></usedefaultcontrolleralways>
>> > </params>
>> > </frontController>
>> > <modules>
>> > <default><![CDATA[default]]></default>
>> > <error><![CDATA[error]]></error>
>> > <user><![CDATA[user]]></user>
>> > </modules>
>> > <!-- Doctrine application plugin -->
>> > <doctrine>
>> > <dbtype><![CDATA[dbtype]]></dbtype>
>> > <dbhost><![CDATA[localhost]]></dbhost>
>> > <dbname><![CDATA[dbname]]></dbname>
>> > <dbuser><![CDATA[dbuser]]></dbuser>
>> > <dbpass><![CDATA[dbpass]]></dbpass>
>> > </doctrine>
>> > <!-- View application plugin -->
>> > <view><![CDATA[view]]></view>
>> > </resources>
>> >
>> >
>> > --- snip ---
>> >
>> >
>> > The default Module Autoloader is loaded correctly during bootstrapping,
>> > making available the default resource types (form, model, dbtable), but
>> I
>> > use Doctrine so dbtable is not used and I would like to insert, override
>> > or even replace the default resource type(s) with a folder in models
>> that
>> > Doctrine uses which is 'generated'.
>> >
>> >
>> > My preference is that when my Resource Plugin which configures Doctrine
>> as
>> > my DB layer, also can inject the needed resource type into the default
>> > module autoloader, in order to make the configuration available in all
>> > modules.
>> >
>> >
>> > I have tried for the past day to get this to work but all of the
>> examples
>> > I find are to create a module autoloader in the module bootstrap file
>> > which means (as I understand it) that I have to do this for each module
>> > bootstrap.
>> >
>> >
>> > I am still new to Zend and struggling a bit with the changes in v1.8, so
>> I
>> > may have just missed the example that shows how this is done.
>> >
>> >
>> > Of course my ultimate problem here is that when I try to load a model
>> > User.php in the models folder which extends generated\BaseUser.php, the
>> > BaseUser class is not found.
>> >
>> > Thanks,
>> > David
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Zend-Framework-%2B-Doctrine-Module-Autoloader-issue-tp24392765p24414344.html
>> Sent from the Zend Framework mailing list archive at Nabble.com.
>>
>>
>