最近工作不忙,没什么事情。看了看 think PHP3.2 和5.0的区别,无意中发现了空操作和空控制器的介绍。
看明白后有点疑问就是这些东西的适用场景有哪些,然后谷歌了一下,发现基本上都是使用在当用户通过URL有意或者无意传递一些不正确的数据信息时候会使用到。
tinkphp 3.2中:空操作
<?php
namespace Home\Controller;
use Think\Controller;
class CityController extends Controller{
public function _empty($name){
//把所有城市的操作解析到city方法
$this->city($name);
}
//注意 city方法 本身是 protected 方法
protected function city($name){
//和$name这个城市相关的处理
echo '当前城市' . $name;
}
}
think php 5.0:空操作
<?php
namespace app\index\controller;
class City
{
public function _empty($name)
{
//把所有城市的操作解析到city方法
return $this->showCity($name);
}
//注意 showCity方法 本身是 protected 方法
protected function showCity($name)
{
//和$name这个城市相关的处理
return '当前城市' . $name;
}
}
3.2和5.0在空操作上基本一样,手册上提示说
V5.0.2+
开始,空操作方法不需要任何参数,如果要获取当前的操作方法名,直接调用当前请求对象来获取,你也可以使用依赖注入(参考请求章节的依赖注入)
think PHP 3.2 空控制器:
我们可以给项目定义一个EmptyController类
<?php
namespace Home\Controller;
use Think\Controller;
class EmptyController extends Controller{
public function index(){
//根据当前控制器名来判断要执行那个城市的操作
$cityName = CONTROLLER_NAME;
$this->city($cityName);
}
//注意 city方法 本身是 protected 方法
protected function city($name){
//和$name这个城市相关的处理
echo '当前城市' . $name;
}
}
think PHP 5.0 空控制器:
我们可以给项目定义一个Error控制器类
<?php
namespace app\index\controller;
use think\Request;
class Error
{
public function index(Request $request)
{
//根据当前控制器名来判断要执行那个城市的操作
$cityName = $request->controller();
return $this->city($cityName);
}
//注意 city方法 本身是 protected 方法
protected function city($name)
{
//和$name这个城市相关的处理
return '当前城市' . $name;
}
}
在5.0中空控制器Error是可以定义的,在config中修改,这没啥可说的了。
// 更改默认的空控制器名
'empty_controller' => 'MyError',
空操作和空控制器看起来虽然不起眼,不过如何能被利用好的话,也可以让网站更加高端点把,至少感觉会人性化一点。
以此作为总结,方便以后工作使用