控制器
优质
小牛编辑
137浏览
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作为模板