2009年7月17日星期五

Re: [fw-mvc] Re: [fw-general] [Fwd: Re: [fw-mvc] Autoloading in zf 1.8.4]

Thanks for the assistance. I appreciate it.
 
-R

 
On 7/17/09, Bart McLeod <mcleod@spaceweb.nl> wrote:
My guess is that your base autoloading mechanism finds all the classes and Zend_Application does not. And/Or, you have a circular require_once. That is something I struggled with this morning. Class A requires Class B and Class B requires_once class A...? So they sort of wait for each other, when you uncomment the line, you break the circle?

Raavi Raaj schreef:
OK when I uncomment the below line (line 290 in Zend/Application.php), the my app seems to function.
require_once $path;
 
Any clue why the above works?
 
-R
 

 
On 7/17/09, Raavi Raaj <raaviraaj77@gmail.com> wrote:
I have my Bootstarp in /application/Bootstrap.php. Below is the sample of my bootstrap
 
 
/application/Bootstrap.php
 
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoload()
    {
        $moduleLoader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '',
        'basePath' => APPLICATION_PATH));

        return $moduleLoader;
    }

...
--------------------------------------------------------------------
 
/public/index.php
 
<?php
// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Set include path to vendor library
set_include_path(implode(PATH_SEPARATOR, array(
    APPLICATION_PATH . '/../library',
    get_include_path()
)));

// Autoloading
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->suppressNotFoundWarnings(false);

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

------------------------------------------------

 
 
-R

 
On 7/17/09, Bart McLeod <mcleod@spaceweb.nl> wrote:
And then forwarded to the wrong list, must have another coffee :-)

Bart McLeod schreef:
forwarded because I forgot to reply to all

------------------------------------------------------------------------

Onderwerp:
Re: [fw-mvc] Autoloading in zf 1.8.4
Van:
Bart McLeod <mcleod@spaceweb.nl>
Datum:
Fri, 17 Jul 2009 14:23:23 +0200
Aan:
Raavi Raaj <raaviraaj77@gmail.com>

Aan:
Raavi Raaj <raaviraaj77@gmail.com>


I think I remember, didn't use it much yet myself, only once  when I did a build from the commandline. Isn't the Bootstrap class the class that you define yourself in your index.php to set everything up that your application needs?

>From the web:
"A Bootstrap.php file exists in the "application" directory which represents a class called "Bootstrap". It's purpose is to initialise the Zend Framework, adjust environment settings (for example, timezone and error_reporting level), and otherwise make application specific tweaks and additions before a HTTP request is processed. Most tutorials take an alternative view and put Bootstrap code into index.php. I strongly suggest you avoid this and use an actual class to organise the Bootstrap code - it makes it a lot easier to read if nothing else!"

So you just have to create it yourself. Read more here (for example):

http://blog.astrumfutura.com/archives/355-An-Example-Zend-Framework-Blog-Application-Part-3-A-Simple-Hello-World-Tutorial.html

-Bart



Raavi Raaj schreef:
Even if I comment out the 'require_once Zend/Application.php'. I keep getting the same error.
*Fatal error*: Class 'Bootstrap' not found in *C:\...\library\Zend\Application.php* on line *292*
 -R
 

 On 7/17/09, *Bart McLeod* <mcleod@spaceweb.nl <mailto:mcleod@spaceweb.nl>> wrote:

   You still have a require_once 'Zend/Application.php' so it could
   be that you have to update your include_path after the upgrade?
   Ohterwise try commenting the line where you require
   Application.php and see if it complains about not finding
   Zend_Application...

   -Bart

   Raavi Raaj schreef:
   Hi,

   Just upgraded (my zf app) form 1.7.8 to 1.8.4. Everything went
   smooth.

   Was trying out the performance tips at
   http://framework.zend.com/manual/en/performance.classloading.html#performance.classloading.striprequires.sed

   My /public/index.php
   ----------------
   <?php

   defined('APPLICATION_ENV')
       || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ?
   getenv('APPLICATION_ENV') : 'production'));

   defined('APPLICATION_PATH')
       || define('APPLICATION_PATH', realpath(dirname(__FILE__) .
   '/../application'));

   set_include_path(implode(PATH_SEPARATOR, array(
       APPLICATION_PATH . '/../library',
       get_include_path()
   )));

   require_once 'Zend/Loader/Autoloader.php';
   Zend_Loader_Autoloader::getInstance();

   require_once 'Zend/Application.php';

   $application = new Zend_Application(
       APPLICATION_ENV,
       APPLICATION_PATH . '/configs/config.php'
   );

   $application->bootstrap()->run();

   ----------------------------
   *Commented out* all require_once statements except the one in
   Zend/Loader/Autoloader.php

   Now I get this error...
   *Fatal error*: Class 'Bootstrap' not found in
   *C:\...\library\Zend\Application.php* on line *292*

   My Bootstrap.php exists in /application/Bootstrap.php

   Any clues what I am doing wrong.

   All help is appreciated.

   -R

   P.S. Without the "commenting out" of require_once statements,
   the app runs fine.






没有评论: