2013-11-14 86 views
1

我開始與ZF2的冒險。 我得到了我的應用程序默認模塊應用程序。 在我的項目中,我添加了一個稱爲用戶的新模塊。 在這個模塊中,我得到了登錄控制器和註冊表控制器。 現在是時候添加ACL了。我從這個教程http://ivangospodinow.com/zend-framework-2-acl-setup-in-5-minutes-tutorial/這樣做。Zend Framework 2添加Acl

但我有問題,這是我的module.acl.php文件:

<?php 
return array(
     'guest'=> array(
       'home', 
       'login', 
       'register' 
     ), 
     'admin'=> array(
       'admin', 
       'delete-user' 
     ), 
); 

,現在當我輸入地址:/用戶/註冊 告訴我messege:

Fatal error: Uncaught exception 'Zend\Permissions\Acl\Exception\InvalidArgumentException' with message 'Resource 'users/default' not found' 

爲什麼這樣說我'用戶/默認'找不到?我無法理解。

如果有必要,我可以從文件添加代碼。

+0

你能告訴module.config.php? – user1409508

+0

確定一次請求 – karkonosze

回答

0
​​

這來自用戶模塊。如果你想我可以從應用程序模塊配置顯示。 我太模塊了。 這從應用模塊:

<?php 
/** 
* Zend Framework (http://framework.zend.com/) 
* 
* @link  http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository 
* @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com) 
* @license http://framework.zend.com/license/new-bsd New BSD License 
*/ 

return array(
    'router' => array(
     'routes' => array(
      'home' => array(
       'type' => 'Zend\Mvc\Router\Http\Literal', 
       'options' => array(
        'route' => '/', 
        'defaults' => array(
         'controller' => 'Application\Controller\Index', 
         'action'  => 'index', 
        ), 
       ), 
      ), 
      // The following is a route to simplify getting started creating 
      // new controllers and actions without needing to create a new 
      // module. Simply drop new controllers in, and you can access them 
      // using the path /application/:controller/:action 
      'application' => array(
       'type' => 'Literal', 
       'options' => array(
        'route' => '/application', 
        'defaults' => array(
         '__NAMESPACE__' => 'Application\Controller', 
         'controller' => 'Index', 
         'action'  => 'index', 
        ), 
       ), 
       'may_terminate' => true, 
       'child_routes' => array(
        '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(
          ), 
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
    'service_manager' => array(
     'abstract_factories' => array(
      'Zend\Cache\Service\StorageCacheAbstractServiceFactory', 
      'Zend\Log\LoggerAbstractServiceFactory', 
     ), 
     'aliases' => array(
      'translator' => 'MvcTranslator', 
     ), 
    ), 
    'translator' => array(
     'locale' => 'en_US', 
     'translation_file_patterns' => array(
      array(
       'type'  => 'gettext', 
       'base_dir' => __DIR__ . '/../language', 
       'pattern' => '%s.mo', 
      ), 
     ), 
    ), 
    'controllers' => array(
     'invokables' => array(
      'Application\Controller\Index' => 'Application\Controller\IndexController' 
     ), 
    ), 
    'view_manager' => array(
     'display_not_found_reason' => true, 
     'display_exceptions'  => true, 
     'doctype'     => 'HTML5', 
     'not_found_template'  => 'error/404', 
     'exception_template'  => 'error/index', 
     'template_map' => array(
      'layout/layout'   => __DIR__ . '/../view/layout/layout.phtml', 
      'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', 
      'error/404'    => __DIR__ . '/../view/error/404.phtml', 
      'error/index'    => __DIR__ . '/../view/error/index.phtml', 
     ), 
     'template_path_stack' => array(
      __DIR__ . '/../view', 
     ), 
    ), 
    // Placeholder for console routes 
    'console' => array(
     'router' => array(
      'routes' => array(
      ), 
     ), 
    ), 
); 
2

你沒有定義默認的控制器和動作,這就是爲什麼你會得到錯誤。
你的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', 
       ), 
      ), 

正如你所看到的,用戶可以訪問所有控制器,如果你需要更多的動力和先進的訪問控制列表,你可以嘗試:

'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()的變化:

$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' 
     ), 
); 
+0

應該改變'''$ route = $ params ['controller']。「\」。$ params ['action'];'''爲'''$ route = $ params ['controller' ]。「\\」。$ params ['action'];'''以避免語法錯誤。 – noctrnal