2014-11-05 3 views
0

젠드 프레임 워크를 처음 사용한다고해서 시작하겠습니다. 나는 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 오류는 Zend가 아닌 Apache에서 발생했습니다. 나는 Zend가 자체 오류 처리 시스템을 가지고 있다는 것을 알지 못했기 때문에 이것을 원래의 글에서 언급하지 않았다. 내 httpd-vhost.conf에서 AllowOverride를 설정하지 않았습니다. 즉, index.php가 작동하지만, .htaccess 파일로 덮어 쓸 수 없기 때문에 Zend가 다른 요청을 처리하지 못했습니다.

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

Tim Fountain의 원래 게시물에 대한 의견은 실제 사례가 나오기 전에 해결해야 할 사항이었습니다.

1

구성과 실제 수업이 일치하지 않습니다. 컨트롤러 클래스를 Auth\User\Controller\UserController으로 선언했으나, 설정에있는 모든 것이 실제로는 단지 User\Controller\UserController 일 것을 제안합니다. 당신에게 (404)를주고 어떤 경로를, 무엇을 구체적으로 수행합니다 아직도 그 후 작동하지 않는 경우

namespace User\Controller; 

, 우리는 좀 더 많은 정보가 필요합니다 :이 경우에 클래스의 네임 스페이스 선언을 변경 404 페이지에서 오류라고 (컨트롤러 클래스를 찾을 수 없음)

+0

아, 그건 분명히 놓친 것입니다. 그러나 그것이 효과가 없었던 이유는 아닙니다. 다른 사람이 동일한 설정/문제를 가지고 있다면 내 질문에 대답했습니다. –

관련 문제