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

Reply via email to