Matthew and all,

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.

Thanks.

J


On Sun, May 3, 2009 at 2:25 PM, Matthew Weier O'Phinney <matt...@zend.com>wrote:

> -- J DeBord <jasdeb...@gmail.com> 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 <jasdeb...@gmail.com> 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 <jasdeb...@gmail.com>
> 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 <
> >         matt...@zend.com> wrote:
> >
> >             -- David Mintz <vtbludg...@gmail.com> wrote
> >             (on Saturday, 02 May 2009, 08:54 AM -0400):
> >             > On Sat, May 2, 2009 at 8:50 AM, Matthew Weier O'Phinney <
> >             matt...@zend.com>
> >             > wrote:
> >             >     -- J DeBord <jasdeb...@gmail.com> 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            | matt...@zend.com
> >             Zend Framework          | http://framework.zend.com/
> >
> >
> >
> >
> >
> >
>
> --
> Matthew Weier O'Phinney
> Project Lead            | matt...@zend.com
> Zend Framework          | http://framework.zend.com/
>

Reply via email to