Работа с пространствами имен
Пространства имен можно использовать для предотвращения столкновений имён классов; это означает, что если у вас есть два контроллера в приложении с одинаковым именем, пространство имён можно использовать для их различения. Пространства имен также полезны для создания пакетов или модулей.
Настройка фреймворка
Использование пространств имен имеет некоторые последствия при загрузке соответствующего контроллера. Для настройки поведения фреймворка в соответствии с пространствами имён необходимо выполнить одну или несколько из следующих задач:
Используйте стратегию автоматической загрузки, которая учитывает пространства имен, например, с помощью Phalcon\Loader:
$loader->registerNamespaces(
array(
'Store\Admin\Controllers' => "../bundles/admin/controllers/",
'Store\Admin\Models' => "../bundles/admin/models/",
)
);
Укажите его в маршрутах в качестве отдельного параметра в путях маршрута:
$router->add(
'/admin/users/my-profile',
array(
'namespace' => 'Store\Admin',
'controller' => 'Users',
'action' => 'profile',
)
);
Передайте его как часть маршрута:
$router->add(
'/:namespace/admin/users/my-profile',
array(
'namespace' => 1,
'controller' => 'Users',
'action' => 'profile',
)
);
Если вы работаете только с одним пространством имен для каждого контроллера в вашем приложении, вы можете определить пространство имен по умолчанию в диспетчере. Сделав это, вам не нужно указывать полное имя класса в пути маршрутизатора:
//Registering a dispatcher
$di->set('dispatcher', function() {
$dispatcher = new \Phalcon\Mvc\Dispatcher();
$dispatcher->setDefaultNamespace('Store\Admin\Controllers');
return $dispatcher;
});
Контроллеры в пространствах имён
Следующий пример показывает, как реализовать контроллер, использующий пространства имён:
namespace Store\Admin\Controllers;
class UsersController extends \Phalcon\Mvc\Controller
{
public function indexAction()
{
}
public function profileAction()
{
}
}
Модели в пространствах имён
При работе с моделями в пространствах имен следует учитывать следующее:
namespace Store\Models;
class Robots extends \Phalcon\Mvc\Model
{
}
Если модели имеют связи, они также должны включать пространство имён:
namespace Store\Models;
class Robots extends Phalcon\Mvc\Model
{
public function initialize()
{
$this->hasMany('id', 'Store\Models\Parts', 'robots_id', array(
'alias' => 'parts'
));
}
}
В PHQL вы должны писать операторы, включая пространства имён:
$phql = 'SELECT r.* FROM Store\Models\Robots r JOIN Store\Models\Parts p';
© 2011–2016 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/2.0.0/reference/namespaces.html