cmsx/controller

CMSx 控制器组件

dev-master 2013-03-17 20:57 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:48:52 UTC


README

路由

为了使控制器地址和错误处理工作,需要组织一个应用程序的统一入口点。

$r = new \CMSx\Router; //Создаем объект Router
$r->setControllersPath('/path/to/controllers/'); //Указываем путь к папке с контроллерами
$r->process(); //Включаем обработку запросов

在开发应用程序时,查看错误和异常发生的详细信息很有用。为此,提供了调试模式,通过 enableDebug($on = true) 启用。在调试模式下,异常的详细信息将在错误页面文本中显示。

如果需要实现错误页面的自定义设计,可以通过继承 Page 类,并重写 Router 的 getErrorPage() 方法来实现。当出现错误时,在 Page 对象上添加属性 'exception',其中包含抛出的异常对象。

控制器命名

在系统中已设置控制器和操作的命名约定。默认情况下,主页调用 defaultController->indexAction()

如果指定了一个参数 /some/,如果存在 someController 控制器,将调用 indexAction()。如果没有这样的控制器,系统将尝试调用 defaultController->someAction()

对于 URL /some/work/ 将尝试调用 someController->workAction()

如果第一个参数找不到控制器,系统将尝试调用 defaultController->someAction()。如果这也行不通,将返回 404 错误。

如果找到了控制器,但没有找到相应的方法,系统也会报错。为了处理动态地址,在控制器中可以实现 __call() 函数,在其中定义对该地址的处理逻辑。

控制器的工作

如果控制器继承了基本类 CMSx\Controller,则可以使用以下属性

  • $this->url - 包含当前地址的 URL 对象;
  • $this->controller - 控制器名称,不带 "Controller" 后缀;
  • $this->action - 动作名称,不带 "Action" 后缀。

对于标准错误,已提供抛出 CMSx\Controller\Exception 的方法

  • NotFound($msg = null) - 页面未找到;
  • Unauthorized($msg = null) - 禁止访问;
  • Forbidden($msg = null) - 禁止访问;
  • Unavailable($msg = null) - 服务不可用;
  • ServerError($msg = null) - 服务器错误;

$msg - 可以指定任意说明性消息,该消息仅在启用调试模式时显示,请参阅路由部分。

提供了以下方法用于重定向用户

  • Redirect($url, $permanent = false) - 重定向到指定的 $url。
  • Back() - 返回用户之前访问的地址。这两个方法也抛出 CMSx\Controller\Exception,由 Router 级别处理。

控制器执行后应返回字符串、数字或可以转换为字符串的对象(实现了 __toString() 方法)。如果控制器返回 nullfalse,则不会输出任何内容。

CMSx 框架 中,控制器通常返回 PageTemplate 对象。