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

Router in Zend Framework 2 : failed retrieving

我是 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

我的 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>

谁能帮帮我?

您的getAutoLoaderConfig()方法不正确。

试试这个:

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

注意数组中的键namespaces

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

我通过在 composer.json:

中添加一个字符串解决了这个问题
"autoload": {
    "psr-0": {
    "MyModule": "module/MyModule/src/"
    }
}

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

php composer.phar update