Hi,

I trying to migrate my application from using ZF 0.9.3 to ZF 1.0.0rc1 .
I've read the doc about the new helpers and the migration but I can't figure
out what I need to change in my code.

My code his heavily based on the ZF tutorial found on the dev wiki.

Here's what I have

in bootsrap.php

       ...
       require 'Zend/Controller/Front.php';
       $frontController = Zend_Controller_Front::getInstance(); // manages
the overall workflow
       $frontController->addModuleDirectory($appDir . 'modules');

       // Initialize views
       //require 'Zend/View.php';
       self::$view = new Zend_View($config->view->toArray());
       self::$view->strictVars(); // enables tracking/detection of typos
and misspelled variables in views
       // do not show sensitive logs to requests from non-local networks
       if (self::isLocalRequest()) {
           self::$view->showLog = $config->view->showLog;
       }
       self::$view->sectionName = basename($installDir); // e.g.
"application"
       self::$view->viewSuffix = 'phtml'; // file name suffix for view
script
       // default location shared by all modules
       self::$view->setScriptPath($appDir . 'modules' . $ds . 'default' .
$ds . 'views' . $ds . 'scripts');
       Simon_Log::log("scriptPaths=\n    " . implode("\n    ",
self::$view->getScriptPaths()));

       self::$view->timezone = $config->timezone; // default timezone
       self::$view->now = $now = date('Y-m-d H:i:s');

       /////////////////////////////
       // ==> SECTION: mvc <==
       // Cause controllers to use private views, but with inheritance (i.e.
defaults in self::$view)
       $frontController->setParam('view', clone self::$view); // make
private presentation model for controller
       $frontController->setParam('registry', self::$registry); //
alternative to Zend_Registry::getInstance()

       return $frontController;

then in application/lib/Controller/Action.php

<?php

/** Zend_Controller_Action */
require_once 'Zend/Controller/Action.php';

abstract class Simon_Controller_Action extends Zend_Controller_Action
{
   protected $_redirector = null;

   /**
    * Initialize the controller
    */
   public function init()
   {
       parent::init(); // just good habit (nothing there currently)

       // make the view available to action controllers for holding
presentation model
       $this->view = $this->getInvokeArg('view');
       $this->view->baseUrl = $this->_request->getBaseUrl();
       if (!empty($this->view->viewSuffix)) {
           // i.e. do not alter the view's filename suffix, if specified by
the application
           $this->viewSuffix = $this->view->viewSuffix;
       }

       // now give the module a chance to initialize itself and the view
used by the module's controllers
       $moduleName = $this->_request->getModuleName();
       $class = 'ZFModule_' . ucfirst($moduleName);
       if (!class_exists($class)) {
           $registry = Zend_Registry::getInstance();
           $moduleInit = $registry['appDir'] . 'modules' .
DIRECTORY_SEPARATOR
                         . $moduleName . DIRECTORY_SEPARATOR . $moduleName
. '.php';
           if (is_readable($moduleInit)) {
               include_once $moduleInit;
           }
       }
       if (class_exists($class, false) && method_exists($class,
'moduleInit')) {
           call_user_func(array($class, 'moduleInit'), $this->view);
       }

       // initialize the redirector
       if ($this->_redirector === null) {
           $this->_redirector = $this->_helper->getHelper('Redirector');
       }
   }

   public function initView(array $newViewOptions = array())
   {
       require_once 'Zend/View/Interface.php';
       if (!empty($this->view) && !($this->view instanceof
Zend_View_Interface)) {
           throw new Zend_Controller_Exception("'" . (gettype($this->view)
=== 'object'
               ? get_class($this->view) : $this->view) . _("' does not
implement Zend_View_Interface."));
       }

       $request = $this->getRequest();
       $module  = $request->getModuleName();
       $dirs    = $this->getFrontController()->getControllerDirectory();
       if (empty($module) || !isset($dirs[$module])) {
           $module = 'default';
       }
       $baseDir = dirname($dirs[$module]) . '/views';
       if (!file_exists($baseDir) || !is_dir($baseDir)) {
           throw new Zend_Controller_Exception(_('Missing base view
directory ("%1$s"', $baseDir));
       }

       // if we don't have a view yet, create one
       if (empty($this->view)) {
           require_once 'Zend/View.php';
           $options = array_merge(array('basePath' => $baseDir),
$newViewOptions);
           $this->view = new Zend_View($options);
       } else {
           // This is our chance to automatically *prepend* paths for the
active module,
           // without having side-effects for other modules that might
become active later
           // via an internal reroute (see bootstrap.php's reroute() and
preDispatch()).
           // Since the current view object "inherited" from the view
object setup in bootstrap.php,
           // this view object already has default paths pointing to the
default module's
           // script/helper/filter paths.  Thus, the views in ZFDemo
modules can use default
           // scripts, helpers, and paths shared via the default module.
           $this->view->addScriptPath($baseDir . '/scripts')
                      ->addHelperPath($baseDir . '/helpers')
                      ->addFilterPath($baseDir . '/filters');
           // We could support $newViewOptions here, but code would not be
DRY with respect
           // to Zend_View_Abstract::__construct(), and the view was
already created elsewhere,
           // so there was already an opportunity to supply options.
       }
       return $this->view;
   }


   /**
    * Convenience method: render a view in <module
directory>/views/scripts/<controller name><action name>.<viewSuffix>
    *
    * @param string $segmentName  OPTIONAL render view to named segment
    */
   public function renderToSegment($segmentName = null, $script = null)
   {
       $this->render($script ? $script :
$this->getRequest()->getControllerName()
               . ucfirst($this->getRequest()->getActionName()),
$segmentName, true);
   }
}

and then finaly in application/modules/ged/DocumentsController.php

<?php

class Ged_DocumentsController extends Simon_Controller_Action
{
   // document id requested (if any)
   protected $documentId = false;

   // documents model (list of documents)
   protected $documents;

   /**
    * The default action is "indexAction", unless explicitly set to
something else.
    * Show a list of all documents.
    */
   public function indexAction()
   {
       $this->displayStage3_4();
       $this->displayStage5();
   }


   /**
    * STAGE 3: Choose, create, and optionally update models using business
logic.
    * STAGE 4: Apply business logic to create a presentation model for the
view.
    */
   protected function displayStage3_4()
   {
       // SimonModel_Document provides static methods that auto-instantiate
and manage the model
       $this->view->documents =
SimonModel_Ged_Document::getPresentationModel();
       $this->view->user = 'anonymous';
       // Controller = 'index', Action = 'index', param name = 'document'
       $this->view->documentUrl = 'index/index/document';
   }


   /**
    * STAGE 5: Choose view and submit presentation model to view.
    */
   protected function displayStage5()
   {
       // Hard way:
       //$this->_response->appendBody($this->view->render('
indexDocuments.phtml'));
       $this->renderToSegment('body'); // initiate STAGE 6 in the view
template
   }


   /**
    * redirect bogus URLs back to the application's "home" page
    */
   public function __call($name, $parameters)
   {
       $this->_redirect('/');
   }
}


The problem I get is that once in the view script, the view object has been
reset by the viewRenderer helper and I'm unable to display any data I assign
to the view.

Thanks


--
Martin Carpentier

Reply via email to