使用命名空间

最后更新于: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 ';