控制器的前置方法:
设置 beforeActionList属性可以指定某个方法为其他方法的前置操作,数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法。
[‘except’ => ‘方法名,方法名’] 表示这些方法不执行前置方法
[‘only’ => ‘方法名,方法名’] 表示这些方法使用前置方法
代码部分:
class Before extends Controller
{
protected $beforeActionList = [
'first',
//one方法执行的时候不调用second
'second' => ['except'=>'one'],
//指定只能one调用
'third'=> ['only'=>'one'],
];
protected $flag = false;
protected function first(){
echo 'first <br/>';
}
protected function second(){
echo 'second <br/>';
}
protected function third(){
echo 'third <br/>';
}
public function one(){
return 'one';
}
public function two(){
return 'two';
}
跳转和重定向:
在应用开发中,经常会遇到一些带有提示信息的跳转页面,例如操作成功或者操作错误页面,并且自动跳转到另外一个目标页面。系统的\think\Controller类内置了两个跳转方法success和error,用于页面跳转提示。
public function index(){
if ($this->flag){
//设置成功后将跳转到指定url,如果不指定url,则返回$_SERVER['HTTP_REFERER']
$this->success('成功','../');
}else{
//错误页面的默认跳转页面是返回前一页,通常不需要设置
$this->error('失败');
}
}
默认跳转等待的时间是3秒,success和error方法对应的是两个模板,可以自行修改。error方法会自动判断当前请求是否属于Ajax请求,如果属于Ajax请求则会自动转换为default_ajax_return配置的格式返回信息。 success在Ajax请求下不返回信息,需要开发者自行处理。
模板文件可以使用模板标签,并且可以使用下面的模板变量:
空方法和空控制器
- 当访问了一个不存在的方法时,系统会报错,我们可以使用_empty()来拦截;
public function _empty($name)
{
return '不存在当前方法:'.$name;
}
- 当访问了一个不存在的控制器时,系统也会报错,我们可以使用 Error 类来拦截;
class Error
{
public function index(Request $request)
{
return '当前控制器不存在:'.$request->controller();
}
}
- 系统默认为 Error 类,如果需要自定义,则在 app.php 配置文件中修改; 默认的空控制器名:
‘empty_controller’ => ‘Error’,