目录

控制器

优质
小牛编辑
131浏览
2023-12-01

控制器文件默认放在 app/modules/{module}/actions 文件夹。

控制器的文件命名格式为 XxxxAction.class.php, 所有的控制器都必须继承基类控制器 herosphp\core\Controller, 基类控制器是抽象类:

abstract class Controller extends Template {

    /**
     * 视图模板名称
     * @var string
     */
    private $view = null;

    /**
     * 控制器初始化方法,每次请求必须先调用的方法,action子类可以重写这个方法进行页面的初始化
     */
    public function C_start() {

        $webApp = WebApplication::getInstance();
        //注册当前app的配置信息
        $this->assign('appConfigs', $webApp->getConfigs());
        $this->assign('params', $webApp->getHttpRequest()->getParameters());

    }

    /**
     * 设置视图模板
     * @param       string      $view      模板名称
     */
    public function setView( $view ) {
        $this->view = $view;
    }

    /**
     * 获取视图
     * @return string
     */
    public function getView() {
        return $this->view;
    }

}

Controller 有个 C_start() 方法,这里初始化一些配置和信息。每次请求都会调用先调用这个方法。外部控制器如果要新增一些初始化信息,可以重写这个方法。

namespace test\action;

use herosphp\core\Controller;
use herosphp\http\HttpRequest;

/**
 * demo action
 * @package commom\action
 */
class DemoAction extends Controller {

    //首页
    public function index(HttpRequest $request) {
        $this->setView("index");
        $this->assign("title", "欢迎使用Herosphp");
    }

    //用户登陆
    public function login(HttpRequest $request) {
        $username = $request->getParameter('username', 'trim|urldecode');
        $password = $request->getParameter('password', 'md5');
    }

    //获取用户列表
    public function list(HttpRequest $request) {

    }

}

控制中每个public方法对应一个请求或者一个操作, 调用方法时会自动传入一个 HttpRequest 请求对象,这个对象中封装了一些请求信息。常用的方法有一下几个:

  • getParameter($name, $func) : 获取请求参数, $name => 参数名, $func => 用来过滤参数的函数, eg:$username = $request->getParameter('username', 'trim|urldecode');, 其实就相当于下面代码:
$username = $request->getParameter('username');
$username = urldecode(trim($username));
  • getParameters() : 获取所有的参数,并作为数组返回
  • getRequestUri() : 获取请求地址
  • getReferer() : 获取上一次请求地址
  • getModule() : 获取模块名称

更多方法请查阅 herosphp/http/HttpRequest.class.php

setView()

设置视图模板名称,控制器默认会加载 app/modules/default/{action}_{method}.html 这个模板的。其中{action}是控制器的名称(不包括Action后缀, 比如action文件为DemoAction.class.php, {action} 就是 demo)。但是如果是你想加载自定义模板的话,就可是调用 setView({module}:{template}) 来实现, 其中 {module} 是指模块名称,如:

$this->setView("user:index"); //使用user模块下的index.html作为模板