Zend framework2 Zend Framework 2添加Acl

Zend framework2 Zend Framework 2添加Acl,zend-framework2,acl,Zend Framework2,Acl,我是从ZF2开始冒险的。 我进入了我的应用程序默认模块应用程序。 在我的项目中,我添加了一个名为用户的新模块。 在这个模块中,我得到了登录控制器和注册表控制器。 现在是添加ACL的时候了。我在本教程中这样做 但我的module.acl.php文件中存在以下问题: <?php return array( 'guest'=> array( 'home', 'login', 'r

我是从ZF2开始冒险的。 我进入了我的应用程序默认模块应用程序。 在我的项目中,我添加了一个名为用户的新模块。 在这个模块中,我得到了登录控制器和注册表控制器。 现在是添加ACL的时候了。我在本教程中这样做

但我的module.acl.php文件中存在以下问题:

<?php
return array(
        'guest'=> array(
                'home',
                'login',
                'register'
        ),
        'admin'=> array(
                'admin',
                'delete-user'
        ),
);
为什么这告诉我找不到“用户/默认值”?我不明白


如果有必要,我可以从文件中添加代码

您没有定义默认控制器和操作,这就是为什么会出现错误。
<?php
return array(
    'controllers' => array(
        'invokables' => array(
            'Users\Controller\Index' =>
            'Users\Controller\IndexController',
            'Users\Controller\Register' =>
            'Users\Controller\RegisterController',
                'Users\Controller\Login' => 'Users\Controller\LoginController',
        ),
    ),
    'router' => array(
        'routes' => array(
            'users' => array(
                'type' => 'Literal',
                'options' => array(
                    // Change this to something specific toyour module
                    'route' => '/users',
                    'defaults' => array(
                        // Change this value to reflect the namespace in which
                        // the controllers for your module arefound
                        '__NAMESPACE__' => 'Users\Controller',
                        'controller' => 'Index',
                        'action' => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    // This route is a sane default whendeveloping a module;
                    // as you solidify the routes for your module, however,
                    // you may want to remove it and replace it with more
                    // specific routes.
                    'default' => array(
                        'type' => 'Segment',
                            'options' => array(
                            'route' =>
                            '/[:controller[/:action]]',
                            'constraints' => array(
                                'controller' =>
                                '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action' =>
                                '[a-zA-Z][a-zA-Z0-9_-]*',
                                ),
                            'defaults' => array(
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
    'view_manager' => array(
        'template_path_stack' => array(
            'users' => __DIR__ . '/../view',
        ),
    ),
);
您的ACL基于路由名称,因此下面是它的工作原理示例:

        'login' => array( // This is name of route
            'type' => 'literalt',
            'options' => array(
                'route' => '/users/login',
                'defaults' => array(
                    'controller' => 'Users\Controller\Login',
                    'action' => 'index',
                ),
            ),

        'register' => array( // This is name of route
            'type' => 'segment',
            'options' => array(
                'route' => '/users/register[/:action]',
                'constraints' => array(
                    'action'     => '[a-zA-Z][a-zA-Z0-9_-]+',
                ),
                'defaults' => array(
                    'controller' => 'Users\Controller\Register',
                    'action' => 'index',
                ),
            ),
如您所见,用户可以访问所有控制器,如果您需要更动态和更高级的ACL,您可以尝试:

'controllers' => array(
    'invokables' => array(
        'login' => 'Users\Controller\LoginController',
        'register' => 'Users\Controller\RegisterController',
    ),
),
    'users' => array(
        'type' => 'segment',
        'options' => array(
            'route' => '/users[/:controller][/:action]',
            'constraints' => array(
                'controller' => '[a-zA-Z][a-zA-Z0-9_-]+',
                'action'     => '[a-zA-Z][a-zA-Z0-9_-]+',
            ),
            'defaults' => array(
                'controller' => 'Users\Controller\Default',
                'action' => 'index',
            ),
        ),
而不是在您的checkAcl()更改中:

这就是您定义角色和资源的方式:

return array(
        'guest'=> array(
                'login\login',
                'register\index'
                'register\checkLogin'
        ),
        'admin'=> array(
                'admin\statistics',
                'admin\users'
        ),
);

可以显示module.config.php吗?应该更改
$route=$params['controller']。“\”$params['action']
$route=$params['controller']。“\\”$params['action']
以避免语法错误。
'controllers' => array(
    'invokables' => array(
        'login' => 'Users\Controller\LoginController',
        'register' => 'Users\Controller\RegisterController',
    ),
),
    'users' => array(
        'type' => 'segment',
        'options' => array(
            'route' => '/users[/:controller][/:action]',
            'constraints' => array(
                'controller' => '[a-zA-Z][a-zA-Z0-9_-]+',
                'action'     => '[a-zA-Z][a-zA-Z0-9_-]+',
            ),
            'defaults' => array(
                'controller' => 'Users\Controller\Default',
                'action' => 'index',
            ),
        ),
$route = $e -> getRouteMatch() -> getMatchedRouteName();
$params = $e->getRouteMatch()->getParams();
$route = $params['controller']."\".$params['action'];
return array(
        'guest'=> array(
                'login\login',
                'register\index'
                'register\checkLogin'
        ),
        'admin'=> array(
                'admin\statistics',
                'admin\users'
        ),
);