(TP)ThinkPHP5.1 多级控制器(分层控制器)的理解和使用
ThinkPHP5.1开发手册:访问控制器层(controller),也称主控制器可以通过url访问。但是分层控制器(多级控制器)则不能通过Url直接访问。
控制器定义
//application\index\controller\Index.php(application\模块\控制器\操作(类库))
namespace app\controller\index
class Index{
public function index(){
return "index";
}
}
或者:
//application\index\controller\index.php(application\模块\控制器\操作(类库))
namespace app\controller\index
use think\Controller; //引入TP控制器基类,首字符大写
class Index extends Controller{ //调用基类,首字符大写
public function index(){
return "index";
}
}
控制器中方法的使用
控制器文件一般放在:app/module/controller 下,控制器方法的引用遵从:[ 模块/控制器/操作 ]
三级模式来使用。
如:
url: /public/index/index/index/index
//提示:/public/模块/控制器/类库(操作)/方法
多层(分层)控制器中方法如何调用?
有些时候需要再主控制器controller下再建立一个文件夹,如:admin,那么,admin目录下的操作及方法如何调用呢?能直接使用url方式一层层调用吗?答案是不行,TP严格遵从 [ 模块/控制器/操作 ]
三级模式使用。
正确形式应该如下:
遇到url、链接、路由地址等表示控制器的都可以 .
来链接
如:url(‘index/aa.bb.user/add’)、https://www.xxx.com/index.php/index/aa.bb.user/add.html
//application\index\controller\admin\Index.php多级控制器
//controller/aa/bb/User.php
Route:rule('adduser/:id','index/aa.bb.user/add');
namespace app\index\controller\admin;
class Index
{
public function index()
{
//模板渲染
$view = new View();//必须申明use think\View;
return $view->fetch('index');
//或者
return view('index');
}
}
或者:
namespace app\index\controller\admin;
use think\Controller;
class Index extends Controller
{
public function index()
{
// 获取包含域名的完整URL地址
$this->assign('domain',$this->request->url(true));
//继承Controller的话可以直接调用下面这个
return $this->fetch('index');
}
}
下面是一个实际的例子截图,说明多级控制器下的输出模板及模板中调用的方法:
在模板中这样调用:
好啦,今天就这么多,每天进步一点点!