2014-11-05 32 views
0

讓我首先說我是Zend Framework的新手。我正在嘗試使用ZF2創建一個API,爲此,我正在嘗試設置一個允許對資源進行分組的結構。在幾乎所有的我所經歷的例子,我已經看到了人們使用標準的設置:如何獲得ZF2模塊中的多個子文件夾/命名空間

ModuleA 
    ->src 
    ->ModuleA 
     ->Controller 
     ->Entity 

不過,我不是「襪子的抽屜」做法的忠實粉絲,喜歡的東西分類。這就是我試圖完成:

ZF2 module structure

每個控制器和實體文件夾有它自己的控制器和實體類。在Module.php我加入了不同的命名空間到磁帶自動加載像這樣:

public function getAutoloaderConfig() 
{ 
    return array(
     'Zend\Loader\ClassMapAutoloader' => array(
      __DIR__ . '/autoload_classmap.php', 
     ), 
     'Zend\Loader\StandardAutoloader' => array(
      'namespaces' => array(
       'User' => __DIR__ . '/src/User', 
       'Permission' => __DIR__ . '/src/Permission', 
       'Group' => __DIR__ . '/src/Group', 
      ), 
     ), 
    ); 
} 

我安裝我的module.config.php像:

'controllers' => array(
    'invokables' => array(
     'Auth\Controller\User' => 'User\Controller\UserController', 
     'Auth\Controller\Permission' => 'Permission\Controller\PermissionController', 
     'Auth\Controller\Group' => 'Group\Controller\GroupController', 
    ), 
), 

'router' => array(
    'routes' => array(
     'user' => array(
      'type' => 'segment', 
      'options' => array(
       'route' => '/user[/:id]', 
       'constraints' => array(
        'id'  => '[0-9]+', 
       ), 
       'defaults' => array(
        'controller' => 'Auth\Controller\User', 
        'action'  => 'index', 
       ), 
      ), 
     ), 

而且我UserController的樣子:

<?php 
namespace Auth\User\Controller; 

use Zend\Mvc\Controller\AbstractRestfulController; 
use User\Entity\UserTable; 
use Zend\View\Model\JsonModel; 

class UserController extends AbstractRestfulController 
{ 
protected $_objectManager; 

public function indexAction() 
{ 
    $users = $this->getObjectManager()->getRepository('\User\Entity\User')->findAll(); 
    $JSONArray = []; 
    //Convert to JSON objects 
    foreach ($users as $entity) { 
     $JSONArray[] = $entity->getJsonData(); 
    } 
    return new JsonModel(array('users' => $JSONArray)); 
} 

我已經嘗試了很多不同的命名空間的情況下,但我一直在404找不到錯誤。我已經通過這個帖子了:

Multiple namespaces under same module in ZF2

告訴我,我在正確的軌道上,但我不知道爲什麼沒有找到我的道路。

回答

0

問題其實很簡單;我得到的404錯誤來自Apache,而不是來自Zend。由於我不知道Zend有自己的錯誤處理系統,因此我在原始文章中沒有提到這一點。在我的httpd-vhost.conf中,我有AllowOverride沒有設置。這意味着index.php正在工作,但任何其他請求都沒有得到Zend處理,因爲它無法用.htaccess文件覆蓋。

<VirtualHost *:80> 
    ServerName api.localhost 
    DocumentRoot "path/to/public" 
    SetEnv APPLICATION_ENV "development" 
    ErrorLog "logs/localhost-error.log" 
    CustomLog "logs/localhost-access.log" common 
    <Directory "path/to/public/"> 
     DirectoryIndex index.php 
     AllowOverride All <- this was AllowOverride none 
     Order Allow,Deny 
     Allow from all 
     Require local 
    </Directory> 
</VirtualHost> 

蒂姆噴泉在原崗位的評論是也未嘗過之前,我有工作的例子加以固定。

1

您的配置和您的實際班級不匹配。您已將控制器類聲明爲Auth\User\Controller\UserController,但是您的配置中的所有內容都表明您實際上只想要它爲User\Controller\UserController。如果是這樣,在你的類更改命名空間聲明:

namespace User\Controller; 

如果仍不能以後的工作,我們需要一些更多的信息:什麼路徑給你404,並且具體是什麼做的404頁面說錯誤是(控制器類未找到?)

+0

啊,是的,那是我絕對錯過的。但這不是它不工作的原因。我已經回答了我自己的問題,如果任何人有相同的設置/問題。 – 2014-11-05 15:22:24