tp5-3控制器初始化和跳转
0
无    2018-04-09 15:37:35    1939    0
fumingwan
A 控制器 命名 访问 加载 初始化

1 命名首字母大写并驼峰形式

2 浏览器访问驼峰形式控制器会报错 将中间大写字母前加下划线 

   如:访问http://www.tp5.com/UserInfo 因改为 http://www.tp5.com/User_Info 

0 方法里的return

   正常不加载页面时 return 是返回打印出值

   这是在配置文件 'default_return_type' => 'html', 决定的,如果是json  那么方法里返回打印就是json 格式了

1 加载静态页面 和传数据

   加载有两个方法 系统类  和 系统方法

<?php
$view = new \think\View;
return $view->fetch('type');

return view("type");

加载视图的数组遍历

	
	
	
	


    
    	
    		
    			用户展示页面
    		
    		
    				
    					
    						ID
	    					NAME
	    					PASS
    					
    				
    					{volist name='data' id='value'}
    					
    						{:$value['id']}
    						{:$value.username}
    						{:$value.password}
    					
    					{/volist}

    				
    		
    	
    


 

2 使用系统相关方法得继承系统控制器

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
     public function type()
    {
      return $this->fetch('type');

 

3 控制器的初始化方法

   所有控制器类继承了\think\Controller类的话,可以定义控制器初始化方法_initialize,在该控制器的方法调用之前首先执行。

<?php
    public function _initialize()
    {
        echo 'init<br/>';
    }

4 前置方法

   使用案例:可以把一些检查等 公共方法提取出来 ,放控制器头部,能减少代码冗余

<?php
namespace app\index\controller;
//引用系统控制器类和 数据类
use think\Db;
use think\Controller;
class Blog extends Controller
{
    protected $beforeActionList = [
            'first',                                    //所有方法都可用
            'second' =>  ['except'=>'index'],           //除了index 其他都可用
            // 执行 getcreate getread两个方法之前先操作 three 方法
            'three'  =>  ['only'=>'getcreate,getread'], //只给getcreate,getread 使用 
        ];

 

B 控制器的跳转

1 跳转函数

 继承\think\Controller而使用到的success 和error 方法是基于 /thinkphp/library/traits/controller/jump.php 类里的原生方法

<?php
    public function check()
    {
        $name = $_POST['name'];
        $password = $_POST['password'];

        if($name=='666' && $password=='777')
        {
            //success('提示信息','跳转地址','数据','等待几秒','header信息')
            $this->success('登录成功鸟',url('index/index'));
        }
        else
        {
            $this->error();
        }
    }

2 更改模板 

    a  首先在 配置文件里面 找到配置参数 并更改

    b  找到   模板位置 \WWW\thinkphp5\thinkphp\tpl\dispatch_jump.tpl

    c  然后新建文件 参照下面的参数和  原来模板 编写模板 
         变量          含义
        $data     要返回的数据
        $msg     页面提示信息
        $code    返回的code
        $wait     跳转等待时间 单位为秒
        $url        跳转页面地址

 

//默认错误跳转对应的模板文件
'dispatch_error_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',
//默认成功跳转对应的模板文件
'dispatch_success_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',  

 

  d 使用bootstrap 写事例

 

<!DOCTYPE html>
<html>
    <head>
    	<meta charset="utf-8">
    	<title>Document</title>
    	<link rel="stylesheet" type="text/css" href="/static/bs/css/bootstrap.min.css">
    </head>
    <body>
        <div class="container">
        	<div class="col-md-4"></div>
        	<div class="col-md-4">
        		<div class="panel panel-primary">
        			<div class="panel-heading"><?=$msg ?></div>
    	    		<div class="panel-body">
    	    			<img src="/static/success.jpg" width="100%">
    	    			<p class="jump">
                页面自动 <a id="href" href="<?php echo($url);?>">跳转</a> 等待时间: <b id="wait"><?php echo($wait);?></b>
                        </p>
    	    		</div>
    	    		
        		</div>
        	</div>
        	
        </div>
        <script type="text/javascript">
            (function(){
                var wait = document.getElementById('wait'),
                    href = document.getElementById('href').href;
                var interval = setInterval(function(){
                    var time = --wait.innerHTML;
                    if(time <= 0) {
                        location.href = href;
                        clearInterval(interval);
                    };
                }, 1000);
            })();
        </script>
    </body>
</html>

 

C 重定向

 

<?php
    public function strict()
    {
        //redirect( $url,   $params = [参数传递],   $code = 302,   $with = [隐式传参])
        $this->redirect('index/api',['name'=>'小黄','school'=>'机电'],302,[]);
    }

 

D 空操作和空控制器 和资源控制器

空操作       是指系统在找不到指定的操作方法时,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。

空控制器    是指当系统找不到指定的控制器名称的时候,系统会尝试定位空控制器(Error),利用这个机制我们可以用来定制错误页面和进行URL的优化。

建议网站上线前,前后台都写空控制器,并每个控制器都写空方法

 1 空操作

<?php
    public function _empty()
    {
        $this->api();            //不改变浏览器url地址
        $this->redirect('api');  //改变浏览器url地址
    }

2 空控制器

空控制器Error是可以定义的

// 更改默认的空控制器名
'empty_controller' => 'MyError',

 

<?php
<?php
namespace app\index\controller;

//引用系统控制器类 
 use think\Controller;
 class Error extends Controller
{
    public function index()
    {
         $this->redirect('/');
         
    }
    
    public function _empty()
    {
         $this->redirect('/');
    }
}

3 资源控制器

进入命令行 进入网站根目录 \WWW\thinkphp5 

// 生成index模块的Blog资源控制器
php think make:controller index/Blog

// 生成model数据模型
php think make:model index/User

// 清除 runtime 文件夹里的 临时文件
php think clear

 

 E 自定义控制器

1 我们可以在某模块下 新建文件夹basic并新建common类

2 然后可以 controller('common','basic');  实例化

以下代码 第二参数 可看出 ,然后放些可任意调用的方法  方便调用,譬如公共的控制器基础类来被继承

也可以在视图里 第三参数 demo 使用 action 直接调用方法返回数据 

<?php
/**
     * 实例化控制器 格式:[模块/]控制器
     * @param string    $name 资源地址
     * @param string    $layer 控制层名称
     * @param bool      $appendSuffix 是否添加类名后缀
     * @return \think\Controller
     */
    function controller($name, $layer = 'controller', $appendSuffix = false)
    {
        return Loader::controller($name, $layer, $appendSuffix);
    }
    
      /**
     * 调用模块的操作方法 参数格式 [模块/控制器/]操作
     * @param string        $url 调用地址
     * @param string|array  $vars 调用参数 支持字符串和数组
     * @param string        $layer 要调用的控制层名称
     * @param bool          $appendSuffix 是否添加类名后缀
     * @return mixed
     */
    function action($url, $vars = [], $layer = 'controller', $appendSuffix = false)
    {
        return Loader::action($url, $vars, $layer, $appendSuffix);
    }

 譬如新建

<?php
namespace app\admin\basic;

use think\Controller;

 class Common extends Controller{
	
	public function common1()
	{
		return 'basic文件夹的common/common1';
	}
}

 无论在哪个模块调用

<?php
$con = controller('admin/Common','basic');
return $con->common1();
//直接调用
return action('admin/Common/common1','','basic');

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

tp5-2 路由,获取参数和url
文档导航