Вопрос

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

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

use Entities\User, Entities\Address;


class IndexController extends Zend_Controller_Action
{
...
}

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

namespace Entities;


class IndexController extends \Zend_Controller_Action
{
...
}
Это было полезно?

Решение

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

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

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 для полного поддержки пространства имен.

Другие советы

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

Entities\IndexController 

Так что его больше не найдено Zend.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top