Zend Framework 2中的路由器:检索失败

时间:2015-03-10 08:46:48

标签: php routing zend-framework2 zend-route

我是Zend Framework的新手,我曾经使用框架CI和Laravel,但在我的项目中我应该使用ZF2。老实说,我不知道如何使用ZF2构建应用程序。我按照这里的说明进行操作:https://www.youtube.com/watch?v=OYkVHiXeGeY 但是我遇到了一些错误。

Zend\Mvc\Controller\ControllerManager::createFromInvokable: failed retrieving "csnusercontrolleruser(alias: CsnUser\Controller\User)" via invokable class "CsnUser\Controller\UserController"; class does not exist

my strucktur文件夹:

:: module
   ->CsnUser
     >>config
       ->module.config.php
     >>src
       ->CsnUser
         ->Controller
           ->UserController.php
     >>view
       ->csn-user
         ->user
           ->index.phtml
     >>Module.php

Module.php

<?php 

namespace CsnUser;

use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;

class Module{

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }

    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespace' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }   

}

module.config.php

<?php 

return array(
    'controllers' => array(
        'invokables' => array(
            'CsnUser\Controller\User' => 'CsnUser\Controller\UserController',
        ),
    ),

    'router' => array(
        'routes' => array(
            'csn_user' => array(
                'type' => 'Literal',
                'options' => array(
                    'route' => '/csn-user',
                    'defaults' => array(
                        '__NAMESPACE__' => 'CsnUser\Controller',
                        'controller' => 'User',
                        'action' => 'index',
                    ),
                ),

                'may_terminate' => true,
                'child_routes' => array(
                    'default' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/[:controller[/:action[/:id]]]',
                            'constraints' => array(
                                    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                    'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                                    'id'         => '[0-9]*',
                            ),
                            'defaults' => array(),
                        ),
                    ),
                ),

            ),
        ),
    ),

    'view_manager' => array(
        /*'template_map' => array(
            'layout/Auth' => __DIR__ . '/../view/layout/xxxx.phtml',
        ),*/
        'template_path_stack' => array(
            'csn_user' => __DIR__ . '/../view'
        ),
    ),
);

UserController.php

<?php 

namespace CsnUser\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class UserController extends AbstractActionController{

    public function indexAction()
    {
        return new ViewModel();
    }
}

index.phtml

<h1>Welcome</h1>

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您的getAutoLoaderConfig()方法不正确。

尝试一次:

public function getAutoloaderConfig()
{
    return array(
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
            ),
        ),
    );
}

注意数组中的键namespaces

your instruction video at 4:40中,他们也使用复数:)

答案 1 :(得分:0)

我通过向 composer.json 添加字符串解决了这个问题:

"autoload": {
    "psr-0": {
    "MyModule": "module/MyModule/src/"
    }
}

然后,在控制台中,我导航到项目文件夹并运行:

php composer.phar update