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.
>
>