Thinkphp--summary[2]

控制器定义

1.控制器定义
2.渲染输出

一:控制器定义

1.控制器即controller,控制器文件存放在controller目录下,
2.类名和文件名大小写保持一致,并采用驼峰式(首字母大写)

use think\controller
class Index extends controller
{
}

3.继承控制器基类,可以更方便使用功能,但不是必须的
4.系统也提供了其他方式,在不继承的情况下完成相同功能
5.如果是一个单词,首字母大写,比如 Index.php
6.URL访问时直接public/index即可
7.那么如果创建的是双字母组合,比如HelloWord
8.URL访问必须为public/hello-world
9.如果你想原样的方式访问URL,则需要关闭配置文件app.php中的自动转换

// 是否自动转换URL中的控制器和操作名
    'url_convert'            => true,  //改成false

10.此时,URL访问可写为:public/HelloWorld
11.如果你想改变根命名空间app为其他,可以在根目录下创建.env文件
12.然后写上配对的键值对即可,app_namespace=application
在controller下创建一个HelloWorld,php

class HelloWorld
{
  public function index()
  {
    return 'hello,world';
  }
  
} 

渲染输出
1.Thinkphp直接采用方法内return返回的方式直接就输出了
2.使用json输出,直接用json函数

$data=array('a'=>1,'b'=>2,'c'=>3);
return json($data);

3.采用view输出模板,开启错误提示,可知道如何创建模板
return view();
4.默认输出格式为html格式输出,如果返回的是数组,则会报错。
5.可以更改配置文件里的默认输出类型,更改为 json

return['user'=>'Lee','age'=>100];
// 默认输出类型
    'default_return_type'    => 'json',

public function arr()
{
 $data=array('a'=>1,'b'=>2,'c'=>3);
 return json($data);
}
public function abc()
{
return view();//会报错,模板文件不存在,c:...\view\index\abc.html
}
=>解决办法:
在application中创一个文件夹view,在view中创index文件夹,在index中加abc.html

6.一般来说,正常页面都是html输出,用于模板,AJAX默认是json.
7.如果继承了基类控制器,那么可以定义控制器的初始化方法
initialize();
8.initialize()方法会在调控制器方法之前执行

protected  function initialize()
{
//parent::initialize();
echo 'init';
}

9.initialize()方法不需要任何返回值,输出用php方式,return无效,

控制器操作

1.继承controller类后可以设置一个$beforeActionlist属性来创造前置方法。

protected $beforeActionList=[
'first',
//one 方法执行不调用second,前置。
'second'=>['except'=>'one'],
//third前置只能通过调用one和two方法触发
'third'=>['only'=>'one,two'],
];
protected function first()
{
 echo 'first<br/>';
}


 

2.此时我们可以分别URL访问不同的方法来理解前置的触发执行
重创一个Before.php

class Befor extends Controller
{
  public function index()
  {
   return 'index';
  }
  protected $beforeActionList=[
  'first',
  'second'=>['except'=>'one'],//one方法执行不调用second前置
  'third'=>['only'=>'one','two']
  ];
  
  protected function first()
  {
  echo 'first</br>';
  }
  protected function second()
  {
   echo 'second';
  }
  protected function third()
  {
  echo 'third';
  }
  
  public function one()
  {
  return 'one';
  }
  public function two()
  {
   retunr 'two';
  }
  
}
访问localhost/tp5.1/public/before/index
first
second 
index
访问localhost/tp5.1/public/before/two
first
second
two

访问localhost/tp5.1/public/before/one
first
one

二.跳转和重定向
1.controller类提供2个跳转的方法,success(msg,url)和error(msg)

public function index()
{
 if($this->flag){
 //如果不指定url,则返回$-SERVER['HTTP_REFERE']
 $this->success('成功!','../');
 }
 else
 {
  //自动返回前一页
  $this->error('失败');
 }
}

2.成功或错误有一个固定的页面模板: ‘thinkphp/tpl/dispatch_jump.tpl’;
3.在app.php配置文件中,我们可以更改自己个性化的跳转页面:
//默认跳转页面对应的模板文件
// 默认跳转页面对应的模板文件
‘dispatch_success_tmpl’ => Env::get(‘think_path’) . ‘tpl/dispatch_jump.tpl’,
‘dispatch_error_tmpl’ => Env::get(‘think_path’) . ‘tpl/dispatch_jump.tpl’,

protected $flag=true;
public function index()
{
  if($this->flag)
  $this->success('注册成功','../');
   else
 {
  $this->error('失败');
 }
 return 'index;
}
如果是错误的,3秒后返回刚才的一页,即返回上层

4.如果需要自定义跳转页面,可以使用如下的模板变量

变量说明
$data要返回的数据
$msg页面提示信息
$code返回的code
$wait跳转等待时间,单位为秒
$url跳转页面地址

三.空方法和空控制器
1.当访问了一个不存在的方法时,系统会报错,我们可以使用_empty()来拦截

public function _empty($name)
{
 return '不存在当前方法'.$name;
}

2.当访问了一个不存在的控制器时,系统也会报错,我们可以使用Error类来拦截
在controller下创建一个Error.php

class Error
{
 public function index(Request $request)
 {
   return '当前控制器不存在'.$request->controller();
 }
}

3.系统默认为Error类,如果需要自定义,则在app.php配置文件中修改

 // 默认的空控制器名
    'empty_controller'       => 'Error',
$m=M('User');//表名要大写非常重要  
$arr=$m->select();//得到的是一个数组  
$this->assign('data',$arr);//把一个二维数组分配给data  
$this->display();//调用模板
模板可以遍历数组
//vo代表的是当前的数组,因为是二维数组按顺序读取。
<{$vo.id}>----<{$vo.username}>-----<{$vo.sex}>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值