CI控制器调用内部方法并载入相应模板的做法

当我打开链接:http://localhost/3g/index/open/a/b?from=timeline后,判断链接中的from是否等于timeline,如果等于timeline,那么就调用控制器内部的timeline方法,并载入timeline.php这个模板。

class Index extends CI_Controller {
    function __construct() {
        parent::__construct();
    }

    public function open($a=0,$b=0) {
        if ($_GET['from'] == 'timeline') {
            $this -> timeline($a);
            die;
        } else {
            $data['b'] = $b;
            $this -> load -> view('3g/index/open',$data);
        }
    }
    public function timeline($a=0) {
        $data['a'] = $a;
        $this -> load -> view('3g/index/timeline',$data);
    }
}

此时输出的页面一片空白,并没有载入timeline.php这个模板,正确的做法是:

class Index extends CI_Controller {
    function __construct() {
        parent::__construct();
    }

    public function open($a=0,$b=0) {
        if ($_GET['from'] == 'timeline') {
            $this -> timeline($a);
            die;
        } else {
            $data['b'] = $b;
            $this -> load -> view('3g/index/open',$data);
        }
    }
    public function timeline($a=0) {
        $data['a'] = $a;
        echo $this -> load -> view('3g/index/timeline',$data,true);die;
    }
}

获取视图内容

view函数第三个可选参数可以改变函数的行为,让数据作为字符串返回而不是发送到浏览器。如果想用其它方式对数据进一步处理,这样做很有用。如果将view第三个参数设置为true(布尔)则函数返回数据。view函数缺省行为是 false, 将数据发送到浏览器。如果想返回数据,记得将它赋到一个变量中:

$string = $this->load->view(‘myfile‘, ‘‘, true);

例子:有些情况下,你并不想直接输出视图,而是仅仅想得到视图的内容以备后用。那么可以参考如下代码。

<?php
class Blog extends CI_Controller {

function index()
{
$data[‘todo_list‘] = array(‘Clean House‘, ‘Call Mom‘, ‘Run Errands‘);

$data[‘title‘] = "My Real Title";
$data[‘heading‘] = "My Real Heading";

$buffer = $this->load->view(‘blogview‘, $data, true);
}
}
?>

view方法中的第三个参数表示不输出视图,而只是将结果返回给一个变量。

CI控制器调用内部方法并载入相应模板的做法

时间: 2024-08-10 21:21:03

CI控制器调用内部方法并载入相应模板的做法的相关文章

将对象转为数组方法:延伸array_map函数在PHP类中调用内部方法

public static function objectToArray($d) { if (is_object($d)) { $d = get_object_vars($d); } if (is_array($d)) { return array_map(array(__CLASS__, __FUNCTION__), $d); } else { return $d; } } array_map(array(__CLASS__, __FUNCTION__), $d)解释: 我们可以在PHP手册中

tp5控制器调用,方法调用

<?php //命名空间 namespace app\index\controller; use app\admin\controller\Deer; class User{ public function func(){ echo 'index模块,User控制器,func方法'; } public function test(){ //一.调用相同模块下的不同控制器 //1.直接new类,创建对象,调用方法 $p = new Rabit(); $p->carrot(); echo '<

Spring AOP不拦截从对象内部调用的方法

拦截器的实现原理很简单,就是动态代理,实现AOP机制.当外部调用被拦截bean的拦截方法时,可以选择在拦截之前或者之后等条件执行拦截方法之外的逻辑,比如特殊权限验证,参数修正等操作. 但是最近在项目中要在一个事务中跨数据源进行操作.数据库跨源就不在这里说了,可以自行百度. 这里出现的问题就是,如果我们要拦截某个类的多个方法,且在该类的方法中使用this调用要拦截的方法时会导致拦截失败. 这样说有点抽象,看一个代码: package com.intsmaze.before; public clas

用.native修饰器来对外部组件进行构造器内部方法的调用以及用原生js获取构造器里的方法

html <div id="app"> <span v-text="number"></span> <btn @click.native="add(10,$event)"></btn> <button @click="add(10,$event)">add</button> </div> <button onclick=&qu

Spring AOP不拦截从对象内部调用的方法原因

拦截器的实现原理很简单,就是动态代理,实现AOP机制.当外部调用被拦截bean的拦截方法时,可以选择在拦截之前或者之后等条件执行拦截方法之外的逻辑,比如特殊权限验证,参数修正等操作. 但是最近在项目中要在一个事务中跨数据源进行操作.数据库跨源就不在这里说了,可以自行百度. 这里出现的问题就是,如果我们要拦截某个类的多个方法,且在该类的方法中使用this调用要拦截的方法时会导致拦截失败. 这样说有点抽象,看一个代码: package com.intsmaze.before; public clas

ThinkPHP 3.2.2跨控制器调用方法

 所谓跨控制器调用,指的是在一个控制器中调用另一个控制器的某个方法.在ThinkPHP中有三种方式实现跨控制器调用: 直接实例化: A()函数实例化; R()函数实例化. (1)直接实例化  直接实例化就是通过new关键字实例化相关控制器,例如: 1 $goods = new GoodsController() //直接实例化Goods控制器类 2 $info = $goods->info(); //调用Goods控制器类的info()方法 需要注意的是,如果实例化的控制器与当前控制器不在同一目

CI中控制器名不能和本个 控制器中的方法名相同

控制器名称:application/controllers/tang.php 控制器中方法名称:application/controllers/role.php  中有方法 public  function tang(){ } 这样就会出现错误 CI中控制器名不能和本个 控制器中的方法名相同,布布扣,bubuko.com

avaScript文件中调用AngularJS内部方法或改变$scope变量

需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controller来获取app var appElement = document.querySelector('[ng-controller=mainController]'); 然后在获取$scope变量: var $scope = angular.element(appElement).scope(); 如

ThinkPHP跨控制器调用方法

跨控制器调用方法 1. 先造对象,再调用里面的方法 $sc=new \Home\Controller\IndexController();  用绝对路径找echo $sc->ShuChu(); 2. $sc=new IndexController();  用相对路径 echo $sc->ShuChu(); 还可以使用thingkphp中的快捷方法 1. $sc=A("Index");      使用TP框架的快捷方法A来创建控制器对象  ()内直接写控制器名 [跨模块调用]