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

模块.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__,
                ),
            ),
        );
    }   
}

模块配置.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'
        ),
    ),
);

用户控制器.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();
    }
}

索引.phtml

<h1>Welcome</h1>

谁能帮我?

您的getAutoLoaderConfig()方法不正确。

试试这个一次:

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

注意数组中的键namespaces

在4:40的教学视频中,他们也使用复数:)

我通过在 composer.json 中添加一个字符串来解决这个问题:

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

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

php composer.phar update