使用命名空间
最后更新于:2022-04-02 05:14:07
[TOC]
# 使用命名空间
[命名空间](http://php.net/manual/en/language.namespaces.php) 可用于避免类名冲突;这意味着如果在具有相同名称的应用程序中有两个控制器,则可以使用命名空间来区分它们。命名空间对于创建包或模块也很有用。
## 建立框架
在加载适当的控制器时,使用命名空间会有一些影响。要调整框架行为以命名空间,必须执行以下一项或所有任务:
使用考虑名称空间的自动加载策略,例如使用`Phalcon\Loader`:
```php
registerNamespaces(
[
'Store\Admin\Controllers' => '../bundles/admin/controllers/',
'Store\Admin\Models' => '../bundles/admin/models/',
]
);
```
在路由中将其指定为路径路径中的单独参数:
```php
add(
'/admin/users/my-profile',
[
'namespace' => 'Store\Admin',
'controller' => 'Users',
'action' => 'profile',
]
);
```
将其作为路由的一部分传递:
```php
add(
'/:namespace/admin/users/my-profile',
[
'namespace' => 1,
'controller' => 'Users',
'action' => 'profile',
]
);
```
如果您只为应用程序中的每个控制器使用相同的命名空间,则可以在Dispatcher中定义默认命名空间,通过这样做,您不需要在路由器路径中指定完整的类名:
```php
set(
'dispatcher',
function () {
$dispatcher = new Dispatcher();
$dispatcher->setDefaultNamespace(
'Store\Admin\Controllers'
);
return $dispatcher;
}
);
```
## 命名空间中的控制器
以下示例显示如何实现使用名称空间的控制器:
```php
hasMany(
'id',
'Store\Models\Parts',
'robots_id',
[
'alias' => 'parts',
]
);
}
}
```
在PHQL中,您必须编写包含名称空间的语句:
```php
';