调用视图控制器


在控制器中使用视图控制器

基本使用方式

直接在控制器中调用$this->display(), 框架会自动初始化对应是视图控制器, 并调用其中的同名action

namespace app\web\controllers;

use Cross\MVC\Controller;

class User extends Controller
{
	function index()
	{
        $page = array(
            'p' =>  isset($this->params['p'])?intval($this->params['p']):1,
            'limit' => 20,
            'half' => 3,
            'link' => array("main:index"),
        );

		$USER = new UserModule();
        $result['data'] = $USER->getUserList( $page );
        $result['page'] = $page;

        $this->display($result);
	}
}

从Modules取出数据和分页信息, 放进变量 $result 中, 传给视图控制器的同名方法处理, 在视图控制器中整理数据, 调用模版, 赋值给布局文件中的 $content 变量, 生成最终的结果页面一起返回到 Dispatcher 中,如果有请求缓存则把结果存进缓存中, 然后通过 Response->output() 方法发送给用户, 下次请求的时候先检查是否有缓存, 如果有缓存并且还在缓存的有效期, 直接从缓存把结果返回给用户.

指定视图控制器中的ACTION

指定要调用的视图控制器方法

namespace app\web\controllers;

use Cross\MVC\Controller;

class User extends Controller
{
	function index()
	{
        $page = array(
            'p' =>  isset($this->params['p'])?intval($this->params['p']):1,
            'limit' => 20,
            'half' => 3,
            'link' => array("main:index"),
        );

		$USER = new UserModule();
        $result['data'] = $USER->getUserList( $page );
        $result['page'] = $page;

        $this->display($result, 'JSON');
	}
}

使用视图控制器提供的 JSON 方法,返回一个JSON结果.

是否输出Layer

在控制器中直接调用视图控制器中的方法, 不会输出Layer, 如下例:

class Main extends CoreController
{
	function index()
	{
        $page = array(
            'p' =>  isset($this->params['p'])?intval($this->params['p']):1,
            'limit' => 20,
            'half' => 3,
            'link' => array("main:index"),
        );

		$USER = new UserModule();
        $result['data'] = $USER->getUserList( $page );
        $result['page'] = $page;

		if ($this->is_ajax_request())
		{
			$this->view->index($result);
		} else {
			$this->display($result);
		}
	}
}

如果是ajax请求不输出layer的内容.