Hi,
I had exactly the same problem.

*ZendFramework dir structure (the same of the example on zf manual)
-project
--ZendFramework
----1.10.2-minimal
----1.9.6-minimal


*project/public/index.php
        //PROJECT_ROOT_DIR is defined above
        
        set_include_path(implode(PATH_SEPARATOR, array(
            '/usr/share/php', //zend library is here /usr/share/php/Zend
            realpath(APPLICATION_PATH . '/../library'),
        )));

        /** Zend_Application */
        require_once 'Zend/Application.php';

        // Create application, bootstrap, and run
        $application = new Zend_Application(
            APPLICATION_ENV,
            APPLICATION_PATH . '/configs/application.ini'
        );
        $application->bootstrap()
                    ->run();

*project/application/configs/application.ini    
        autoloaderZfPath = PROJECT_ROOT_DIR "/ZendFramework/"
        autoloaderZfVersion = "1.9.6"

        
Now, I have to add '/usr/share/php' for Zend Framework library so that the line
require_once 'Zend/Application.php';
will not give not found error.

And when I add the zfpath lines in application ini, then I get "cannot
redeclare ... " errors.

thanks,
scs
        

On Fri, Mar 19, 2010 at 4:18 PM, Jake McGraw <jmcgr...@gmail.com> wrote:
> On Fri, Mar 19, 2010 at 2:17 AM, Mike A <mik...@hotmail.co.uk> wrote:
>> On 18 Mar 2010 at 19:02, Jake McGraw wrote:
>>> I'd like to use Zend_Loader_Autoloader::setZfPath() and the
>>> autoloaderZfPath application.ini directive to select a ZF version
>>> based on Environment, exactly as described here:
>>>
>>>
>>> http://framework.zend.com/manual/en/zend.loader.autoloader.html#zend.loader.autoloader.zf-version
>>>
>>> What the tutorial fails to cover is how does one introduce
>>> Zend/Loader/Autoloader.php into your executing code without knowing
>>> the desired ZF path/version before executing Zend_Application? It's a
>>> kind of chicken and egg problem. Also, I've noticed that if you don't
>>> use the same version of Zend/Loader/Autoloader.php as the one you
>>> define in your setZfPath, then you'll get a fatal error (duplicate
>>> class) as require_once('Zend/Loader.php') will execute because you're
>>> now operating in a different directory. The only way around this issue
>>> is to remove every instance of require_once from all ZF classes and
>>> rely on Zend_Loader_Autoloader for all file inclusions.
>>>
>>> So, my question is, how are we supposed to use
>>> Zend_Loader_Autoloader::setZfPath() and the autoloaderZf directives?
>> As it happens I have just written about this issue in a
>> book chapter under authorship. Not perfect, but try...
>> $libraries="/../libraries/";
>> $zf_path="ZF";
>> $zf_ver="1.10.2";
>
> Ok, but your use of $zf_path and $zf_ver makes the whole
> autoloaderZfPath, autoloaderZfVersion application.ini directives moot,
> correct? What I don't understand is, how does one use
> Zend_Loader_Autoloader::setZfPath(), without first loading some
> components of the Zend Framework?
>
> What I've encountered is that, as soon as you include/instantiate
> Zend_Loader_Autoloader, you've sullied the namespace, require_once
> won't look in the same directory as the original version of ZF that
> you used to include the autoloader, therefore, any duplicate
> require_once's will cause duplicate class errors.
>
> So, my question still stands, how does one use
> Zend_Loader_Autoloader::setZfPath(), where the ZF path will be
> different from the one used to include the autoloader?
>
>> // Ensure 'libraries/' folder is on include_path
>> set_include_path(implode(PATH_SEPARATOR, array(
>>  realpath(APPLICATION_PATH .
>>  $libraries.$zf_path.'/'.$zf_ver.'/library/'),
>>  get_include_path(), )));
>> require_once 'Zend/Application.php';
>> $application = new Zend_Application(
>>  APPLICATION_ENV,
>>  APPLICATION_PATH . '/config/config.ini'
>>  );
>> $autoloader = Zend_Loader_Autoloader::getInstance();
>> $path=realpath(APPLICATION_PATH . $libraries.$zf_path);
>> $autoloader->setZfPath($path, $zf_ver);
>> My folder structure matches the one in the example except
>> that Zend framework ("$zf_path") sits one level below my
>> libraries because I have personalised libraries I also
>> want to access.
>> It's messy, with more lines of code than necessary in a
>> perfect world - read "perfect framework" ;)  Also,
>> depending on the need to transport across OSs, it may be
>> desirable to use the PATH_SEPARATOR constant in place of
>> "/". It does, though, enable a single change of $zf_ver to
>> attach the appropriate ZF version.
>> HTH a little...
>> Mike A.
>>
>

Reply via email to