Issues

ZF-6529: Zend_Tool_Project_Provider_View

Description

I tried to use "zf create view", but got some exceptions.

This is patch:


<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category   Zend
 * @package    Zend_Tool
 * @subpackage Framework
 * @copyright  Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 * @version    $Id$
 */

/**
 * @see Zend_Tool_Project_Provider_Abstract
 */
require_once 'Zend/Tool/Project/Provider/Abstract.php';

/**
 * @category   Zend
 * @package    Zend_Tool
 * @copyright  Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class Zend_Tool_Project_Provider_View extends Zend_Tool_Project_Provider_Abstract
{
    
    /**
     * createResource()
     *
     * @param Zend_Tool_Project_Profile $profile
     * @param string $controllerName
     * @param string $actionName
     * @param string $moduleName
     * @return Zend_Tool_Project_Profile_Resource
     */
    public static function createResource(Zend_Tool_Project_Profile $profile, $controllerName, $actionName, $moduleName = null)
    {
        if (!is_string($controllerName)) {
            require_once 'Zend/Tool/Project/Provider/Exception.php';
            throw new Zend_Tool_Project_Provider_Exception('Zend_Tool_Project_Provider_View::createResource() expects \"controllerName\" is the name of a controller resource to create.');
        }
        
        if (!is_string($actionName)) {
            require_once 'Zend/Tool/Project/Provider/Exception.php';
            throw new Zend_Tool_Project_Provider_Exception('Zend_Tool_Project_Provider_View::createResource() expects \"actionName\" is the name of a controller resource to create.');
        }
        
        $profileSearchParams = array();
        
        if ($moduleName) {
            $profileSearchParams = array('modulesDirectory', 'moduleDirectory' => $moduleName);
        }
        
        $profileSearchParams[] = 'viewsDirectory';
        $profileSearchParams[] = 'viewScriptsDirectory';

        if (($viewScriptsDirectory = $profile->search($profileSearchParams)) === false) {
            require_once 'Zend/Tool/Project/Provider/Exception.php';
            throw new Zend_Tool_Project_Provider_Exception('This project does not have a viewScriptsDirectory resource.');
        }
        
        $profileSearchParams['viewControllerScriptsDirectory'] = array('forControllerName' => $controllerName);
        
        // XXXXXXXXX below is failing b/c of above search params
        if (($viewControllerScriptsDirectory = $viewScriptsDirectory->search($profileSearchParams)) === false) {
            $viewControllerScriptsDirectory = $viewScriptsDirectory->createResource('viewControllerScriptsDirectory', array('forControllerName' => $controllerName));
        }
        
        $newViewScriptFile = $viewControllerScriptsDirectory->createResource('ViewScriptFile', array('forActionName' => $actionName));

        return $newViewScriptFile;
    }

    /**
     * create()
     *
     * @param string $controllerName
     * @param string $actionNameOrSimpleName
     */
    public function create($controllerName, $actionNameOrSimpleName)
    {
        
        if ($controllerName == '' || $actionNameOrSimpleName == '') {
            require_once 'Zend/Tool/Project/Provider/Exception.php';
            throw new Zend_Tool_Project_Provider_Exception('ControllerName and/or ActionName are empty.');
        }
        
        $this->_loadProfile();
        
        $view = self::createResource($this->_loadedProfile, $controllerName, $actionNameOrSimpleName);
        
        if ($this->_registry->getRequest()->isPretend()) {
            $this->_registry->getResponse(
                'Would create a view script in location ' . $view->getContext()->getPath()
                );
        } else {
            $this->_registry->getResponse(
                'Creating a view script in location ' . $view->getContext()->getPath() 
                );
            $view->create();
            $this->_storeProfile();
        }

    }
}

Comments

When I use this patch (in ZF 1.8.2) and create a new controller, the names of the view script folder and the view script itself are mixed up. An example:

zf create foo

leads to this structure:


views/
    scripts/
        index/
            index.phtml    (was already there)
            foo.phtml

Instead, there should be a folder named foo with a file named index.phtml in it (which is what the original file achieves).

I don't have the time to fix this right now, but as it seems you have mixed up the parameters $actionName and $controllerName in createResource().

I will be happy if you tell me about following question.

Do you mean the argument order should be exchange between $actionName and $controllerName in createResource()?

Solved in SVN r16192

1) Change parameters order in PHPDoc of createResource.

before change:


    /**
     * createResource()
     *
     * @param Zend_Tool_Project_Profile $profile
     * @param string $controllerName
     * @param string $actionName
     * @param string $moduleName
     * @return Zend_Tool_Project_Profile_Resource
     */

after change:


    /**
     * createResource()
     *
     * @param Zend_Tool_Project_Profile $profile
     * @param string $actionName
     * @param string $controllerName
     * @param string $moduleName
     * @return Zend_Tool_Project_Profile_Resource
     */

2) Correct arguments order of self::createResource in create() method.

before change:


$view = self::createResource($profile, $controllerName, $actionNameOrSimpleName);

after change:


$view = self::createResource($profile, $actionNameOrSimpleName, $controllerName);