SearchTable Of ContentsPrevious topicNext topicThis Page |
使用命名空间¶Namespaces 可以用来避免类名冲突,这意味着,如果你有两个控制器,在应用程序中使用相同的名称, 可以使用命名空间来区分他们。命名空间是也可用于创建module。 Setting up the framework¶使用命名空间时对加载相应控制器会有一定的影响。需要调整框架命名空间的行为,可以实现加载一个或全部: 使用自动加载的方式需要考虑命名空间的影响,以下是使用 Phalcon\Loader 的示例: <?php
$loader->registerNamespaces(
array(
'Store\Admin\Controllers' => "../bundles/admin/controllers/",
'Store\Admin\Models' => "../bundles/admin/models/",
)
);
在定义路由时,控制器的路径可以指定控制器的全名称: <?php
$router->add(
"/admin/users/my-profile",
array(
"controller" => "Store\Admin\Users",
"action" => "profile",
)
);
把命名空间当作路由定义的参数(详见路由器章节): <?php
$router->add(
"/:namespace/admin/users/my-profile",
array(
"namespace" => 1,
"controller" => "Users",
"action" => "profile",
)
);
如果你只在你的应用程序中对每个控制器使用相同的命名空间,那么你可以在注册分发器时定义一个默认的命名空间,这样做的话,你就不再需要在定义路由的时候指定完整的类名称了: <?php
//Registering a dispatcher
$di->set('dispatcher', function() {
$dispatcher = new \Phalcon\Mvc\Dispatcher();
$dispatcher->setDefaultNamespace('Store\Admin\Controllers\\');
return $dispatcher;
});
Controllers with Namespaces¶下面的示例演示如何实现使用命名空间来编写一个控制器: <?php
namespace Store\Admin\Controllers;
class UsersController extends \Phalcon\Mvc\Controller
{
public function indexAction()
{
}
public function profileAction()
{
}
}
Models in Namespaces¶对于模型,使用getSource来指定关联的数据表是非常必要的: <?php
namespace Store\Toys;
class Robots extends \Phalcon\Mvc\Model
{
public function getSource()
{
return "robots";
}
}
另外,因为命名空间的原因,一些魔术方法不能如预期般运行,你可以按如下方式手工定义正确的行为: <?php
namespace Store\Toys;
class Robots extends \Phalcon\Mvc\Model
{
public function getSource()
{
return "robots";
}
public function initialize()
{
$this->hasMany("id", 'Store\Toys\RobotsParts', 'robots_id');
}
public function getRobotsParts($arguments=null)
{
return $this->getRelated('Store\Toys\RobotsParts', $arguments);
}
}
|