cmsx / controller
CMSx 控制器组件
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() 方法)。如果控制器返回 null 或 false,则不会输出任何内容。