-- J DeBord <[email protected]> wrote
(on Sunday, 03 May 2009, 04:49 PM +0200):
> Adding namespaces to the new Autoloader works great as long as they are in the
> include path. For example, a namespace 'App_' which refers to classes in the
> 'App' directory that sits next to the Zend (framework) directory.
>
> Question:
>
> Is there anyway to autoload the classes inside the APPLICATION_PATH .
> '/models'
> directory without putting this directory on the include path? For, example
> when
> you instantiate Model_Users, the autoloader knows to look for APPLICATION_PATH
> .'/models/Users.php'
>
> I started by trying to use Application_Module_Resource_Autoloader and the
> theory sounded right to me, however it did not work.
The resource autoloader and/or the Zend_Application_Module_Autoloader
variant are definitely the answer. However, resource autoloaders expect
at least a component prefix (the vendor namespace can be empty); as
such, assuming you created an instance of
Zend_Application_Module_Autoloader as follows:
$loader = new Zend_Application_Module_Autoloader(array(
'basePath' => APPLICATION_PATH,
'namespace' => '', // no resource namespace
));
your models would then be prefixed with 'Model_'.
> On Sun, May 3, 2009 at 2:25 PM, Matthew Weier O'Phinney <[email protected]>
> wrote:
>
> -- J DeBord <[email protected]> wrote
> (on Saturday, 02 May 2009, 07:43 PM +0200):
> > My code:
> >
> > require_once 'Zend/Loader/Autoloader.php';
> > $autoloader = Zend_Loader_Autoloader::getInstance();
> > $autoloader->registerNamespace(array('Amazon_', 'Nba_'));
> >
> > $filesDomain = new Nba_SimpleDb_Domain_Files;
> >
> > There is a parse error in the class Nba_SimpleDb_Domain_Files.
> > With the code above, when executed, the screen is blank.
>
> This slipped under my radar: suppression is on by default.
>
> Call this when you're doing your autoloader setup:
>
> $autoloader->suppressNotFoundWarnings(false);
>
> and you should start seeing parse errors.
>
> > If I add:
> >
> > require_once('Nba/SimpleDb/Domain/Files.php');
> >
> > I get the parse error.
> >
> > My error reporting fwiw:
> >
> > error_reporting(E_ALL|E_STRICT);
> > ini_set('display_errors', 'on');
> > ini_set('display_startup_errors', 'on');
> >
> > Any hints?
> >
> >
> > On Sat, May 2, 2009 at 6:20 PM, J DeBord <[email protected]> wrote:
> >
> > Alright, I read the article. Great as usual. Thanks Matthew.
> >
> > The following paragraph caught my attention early on:
> >
> > "So, we then tried using the suppression operator ('@'). This gets
> rid of
> > the error notices (though they still show up in logs) -- but has a
> really
> > nasty side effect: if there are parse or compilation errors when
> attempting
> > to load the class, nothing is reported, and you end up with a blank
> white
> > screen with no information."
> >
> > Since changing to the Zend_Loader_Autooader, I've been noticing this
> exact
> > thing is happening. I'll do some investigating, but as of right now,
> if I
> > accidentally use = in an associative array as opposed to => for
> example, I
> > get the blank white screen instead of a parse error.
> >
> > Article was great. I'm going to keep plugging away. Thanks!
> >
> >
> >
> > On Sat, May 2, 2009 at 6:02 PM, J DeBord <[email protected]>
> wrote:
> >
> > Thanks guys! I will be reading Matthew's Dev Zone article this
> evening.
> >
> > Regarding registerNamespace(). How exactly does this work? What
> is the
> > advantage? For example I'm using an Amazon SimpleDb library. I
> keep it
> > in the same library directory next to my Zend (framework)
> directory.
> > The library directory is on the include path. All the class
> names
> in
> > the Amazon directory begin with Amazon_ and use the same naming
> > conventions as the Zend Framework. Should I registerNamespace
> > ('Amazon_') and forego using the setFallbackAutoloader(true) ?
> >
> > Thanks again!
> >
> > J
> >
> >
> >
> > On Sat, May 2, 2009 at 4:30 PM, Matthew Weier O'Phinney <
> > [email protected]> wrote:
> >
> > -- David Mintz <[email protected]> wrote
> > (on Saturday, 02 May 2009, 08:54 AM -0400):
> > > On Sat, May 2, 2009 at 8:50 AM, Matthew Weier O'Phinney <
> > [email protected]>
> > > wrote:
> > > -- J DeBord <[email protected]> wrote
> > > (on Saturday, 02 May 2009, 11:32 AM +0200):
> > > > To make Zend_Loader_Autoloader match the
> functionality of
> > this:
> > > >
> > > > require_once "Zend/Loader.php";
> > > > Zend_Loader::registerAutoload();
> > > >
> > > > Would you do this? :
> > > >
> > > > require_once 'Zend/Loader/Autoloader.php';
> > > > $autoloader = Zend_Loader_Autoloader::getInstance();
> > > > $autoloader->setFallbackAutoloader(true);
> > >
> > > Yes, though the last line can be omitted if you're not
> using
> > any
> > > libraries outside of Zend_ or ZendX_ trees. Or, if you
> know
> > the exact
> > > namespaces of any other libraries, register them:
> > >
> > > $autoloader->registerNamespace(array('Foo_',
> 'Bar_'));
> > >
> > > If we could stick a sticky on this little thread...! I can
> > promise this will
> > > get asked a lot as people's apps blow up following upgrade
> to 1.8
> >
> > I'll add it to the FAQ and release notes.
> >
> > The article I wrote for devzone yesterday appears to be
> helping the
> > transition for many, however.
> >
> > --
> > Matthew Weier O'Phinney
> > Project Lead | [email protected]
> > Zend Framework | http://framework.zend.com/
> >
> >
> >
> >
> >
> >
>
> --
> Matthew Weier O'Phinney
> Project Lead | [email protected]
> Zend Framework | http://framework.zend.com/
>
>
--
Matthew Weier O'Phinney
Project Lead | [email protected]
Zend Framework | http://framework.zend.com/