2009年2月28日星期六

Re: [fw-mvc] Proper use of Zend_Loader_Autoloader_Resource

Ah this is why it didnt work for me :)

Should the methods be private or public in the bootstrap file?

2009/2/28 Matthew Weier O'Phinney <matthew@zend.com>:
> -- Cristian Bichis <contact@zftutorials.com> wrote
> (on Saturday, 28 February 2009, 11:49 AM +0200):
>> Ok, i put up a sample based on http://framework.zend.com/wiki/display/ZFPROP/
>> Zend_Application+-+Ben+Scholzen
>>
>> I don't get the error i encountered before, but i get a new one.
>>
>> //index.php
>> <?php
>>     if( !defined('APPLICATION_ENVIRONMENT'))
>>         define('APPLICATION_ENVIRONMENT', 'production');
>>
>>     define('PUBLIC_PATH', realpath(dirname(__FILE__)));
>>     define('BASE_PATH', realpath(dirname(dirname(__FILE__))));
>>     define('APPLICATION_PATH', BASE_PATH . '/application');
>>     define('MODULE_PATH', APPLICATION_PATH . '/modules');
>>
>>     set_include_path(
>>         BASE_PATH . '/library/dasprid' . PATH_SEPARATOR
>>         .BASE_PATH . '/library/incubator' . PATH_SEPARATOR
>>         .BASE_PATH . '/library' . PATH_SEPARATOR
>>         . get_include_path()
>>     );
>>
>>     require 'Zend/Application.php';
>>
>>     $application = new Zend_Application(APPLICATION_ENVIRONMENT, array(
>>         'autoloaderNamespaces' => array(
>>             'Imagis',
>>         ),
>>         'bootstrap' => APPLICATION_PATH . '/Bootstrap.php'
>>     ));
>>
>>     $application->bootstrap();
>>
>>     Zend_Controller_Front::getInstance()->dispatch();
>> ?>
>>
>> //Bootstrap.php based on http://framework.zend.com/wiki/display/ZFPROP/
>> Zend_Application+-+Ben+Scholzen
>> <?php
>>
>> require_once 'Zend/Application/Bootstrap/Base.php';
>>
>> class Bootstrap extends Zend_Application_Bootstrap_Base
>> {
>>     public $front;
>>
>>     public function init()
>>     {
>>         $this->front = Zend_Controller_Front::getInstance();
>>     }
>>
>>     public function run()
>>     {
>>         $this->front->dispatch();
>>     }
>>
>>     protected function _initControllers()
>>     {
>>         //$this->front->setControllerDirectory(APPLICATION_PATH . '/
>> controllers', 'default');
>>         $this->front->addModuleDirectory(MODULE_PATH . '/modules');
>>         return $this;
>>     }
>>
>>     protected function _initRequest()
>>     {
>>         $this->request = new Zend_Controller_Request_Http;
>>         $this->front->setRequest($this->request);
>>         return $this;
>>     }
>> }
>>
>>
>> And the error is: Fatal error: Call to a member function addModuleDirectory()
>> on a non-object in D:\_Work\site\application\Bootstrap.php on line 22
>>
>>
>> Might be something i configured incorrectly.
>
> No -- but it does reflect that the proposal needs to be updated. :)
> There is a better example in the example.php file inside DASPRiD's user
> branch.
>
> Basically, your index.php looks good -- it's your Bootstrap class that
> isn't working correctly here, and it's due to some conventions that have
> changed as part of the proposal evaluation.
>
> First off, there is no init() method. This is offset by the fact that,
> instead, you can now do dependency checking in your initializers. As
> an example, try the following Bootstrap:
>
>    class Bootstrap extends Zend_Application_Bootstrap_Base
>    {
>        public function _initFrontController()
>        {
>            $this->front = Zend_Controller_Front::getInstance();
>        }
>
>
>        protected function _initControllers()
>        {
>            // runs _initFrontController() if not already run:
>            $this->bootstrapFrontController();
>
>            $this->front->addModuleDirectory(MODULE_PATH . '/modules');
>        }
>
>        protected function _initRequest()
>        {
>            // runs _initFrontController() if not already run:
>            $this->bootstrapFrontController();
>
>            $this->request = new Zend_Controller_Request_Http;
>            $this->front->setRequest($this->request);
>        }
>
>        public function run()
>        {
>            $this->front->dispatch();
>        }
>     }
>
> Note the calls to "bootstrapFrontController()" -- those proxy to
> _initFrontController() -- but will only call that method if not
> previously run. An equivalent is to call bootstrap('FrontController').
>
> Basically, this allows you to ensure certain resources are present prior
> to executing a particular initializer -- such as, in your case, the
> front controller.
>
>> Cristian
>>
>>
>>
>> Matthew Weier O'Phinney wrote:
>>
>>     -- Cristian Bichis <contact@zftutorials.com> wrote
>>     (on Friday, 27 February 2009, 11:11 PM +0200):
>>
>>
>>         Matthew Weier O'Phinney wrote:
>>
>>             However, I've just gone through and cleaned up all the resources to
>>             ensure that the require_once calls are removed and that they are
>>             appropriately declaring their dependencies, so next time you try, you
>>             should not have these issues.
>>
>>
>>
>>             Hmmm... based on your error, I think you had an outdated checkout.
>>
>>         Actually require_once was from my code not Zend code.
>>
>>         The required classes are not developed yet as far as i know. I just checked on
>>         SVN and no, there are not in yet. Also the #zftalk log is confirming what i
>>         said...
>>
>>
>>     Unfortunately, I'm not logged in to IRC at this time. I'm modifying the
>>     QuickStart to use Zend_Application right now, and having no issues. Can
>>     you, or someone else, give an example of how you're using
>>     Zend_Application, and what errors you're running into?
>>
>>
>>
>>
>>
>> --
>> Best regards,
>> Cristian Bichis
>> www.zftutorials.com | www.zfforums.com | www.zftalk.com | www.zflinks.com
>>
>
> --
> Matthew Weier O'Phinney
> Software Architect       | matthew@zend.com
> Zend Framework           | http://framework.zend.com/
>
>

--
----------------------------------------------------------------------
[MuTe]
----------------------------------------------------------------------

没有评论: