doctrine2 zend framework контроллеры пространства имен - PullRequest
0 голосов
/ 03 сентября 2010

Я пытаюсь интегрировать песочницу doctrine2 с приложением Zend Framework по умолчанию. Когда я пытаюсь использовать пространство имен в контроллере, я получаю сообщение об ошибке «Недопустимый класс контроллера (« IndexController »)»

Это работает:

use Entities\User, Entities\Address;


class IndexController extends Zend_Controller_Action
{
...
}

Это не (но должно?):

namespace Entities;


class IndexController extends \Zend_Controller_Action
{
...
}

Ответы [ 2 ]

3 голосов
/ 03 сентября 2010

В первом примере вы импортируете пространства имен в контроллер.Во втором примере вы назначаете контроллер пространству имен.

Импорт пространств имен позволяет ссылаться на классы без необходимости использовать их полное имя класса.

new \Entities\User() // without import
new User() // with import

Назначение пространства именваш контроллер фактически изменяет полное имя для вашего класса.

new \IndexController() // without namespace
new \Entities\IndexController() // with namespace

(Классы внутри пространства имен всегда могут ссылаться на другие классы в этом же пространстве имен без необходимости его «использовать». Я подозреваю, что это былоосновная причина, по которой вы пытались использовать вариант 2).

Zend Framework 1.10 по-прежнему не знает пространства имен.При разборе URL-адреса и попытке загрузить контроллер он будет выглядеть только в глобальном пространстве имен по умолчанию для \IndexController и не будет знать, что он был назначен пользовательскому пространству имен (\Entities\IndexController).

Моя рекомендация заключается в том, что при работе с контроллерами в ZF не назначайте им пространства имен.Импорт работает нормально.Нам придется подождать, пока ZF 2.0 не получит полную поддержку пространства имен.

0 голосов
/ 03 сентября 2010

После прочтения руководства и прочтения части этой страницы может показаться, что в PHP, когда вы хотите объявлять и конструировать пространство имен, вы используете второй синтаксис. Так что это будет создавать объекты, такие как

Entities\IndexController 

так что он больше не найден Зендом.

В соответствии с теми сайтами, которые вы должны использовать, используйте для импорта пространства имен и используйте его.

Вот почему это работает в вашем первом примере, а не во втором.

Надеюсь, я прав, и это помогает!

...