493333王中王开奖结果-王中王开奖一马中特

493333王中王开奖结果让不同类型的网络可以可靠地互相联接,王中王开奖一马中特拥有规模庞大的原创游戏,在这里您将享受的不一样快乐。

网络频道

当前位置:493333王中王开奖结果 > 网络频道 > Yii CGridView columns利用数组或变量传值

Yii CGridView columns利用数组或变量传值

来源:http://www.soniaLorenzana.com 作者:493333王中王开奖结果 时间:2019-09-30 17:04

继续Yii框架的学习与使用,CGridView对于网站后台而言十分有用处,可以很快速地实现数据列表显示,并集成排序,搜索等功能,很巧妙。
今天,在项目中遇到了状态显示问题,在controller中定义了数组:

本文是基于官方入门教程列出概要理解,详细细节参见官方入门教程: http://framework.zend.com/manual/2.1/en/index.html

    public $_status_text = array(
        0 => '待发送',
        1 => '已发送',
        2 => '收到回复',
        3 => '确认成功',
        4 => '确认失败',
    );

 

想把这个$this->_status_text直接用在CGridView中,但发现不可能,显示错误undefined variable.
惟有寻求其他解决办法,及看代码,知道了怎么传值,得到的解决办法,是controller中定义一个方法:
 public function get_status_text($data,$row){
    return $this->_status_text[$data->status]; }

1. 在 zf2 所给的 skeleton application 中创建自己的 Module。

看介绍,上面的$data 代表行数据,而$row代表行号。
而在CGridView的status列,则需要调用这个方法了:

1.1) Setup Module:

array('name'=>'status','type'=>'raw','value'=>array($this,'get_status_text')),

* 目录结构要符合规则。因为 zf2 的 ModuleManager 等组件会根据配置到相应的目录结构下寻找相应的文件。

上面的意思是调用$this下面的方法get_status_text,$this就是controller了。
至此,我们可以知道怎样方便地使用CGridView显示并操作列数据了。

* 在 "module/<YourModuleName>" 下创建 Module.php。zf2 的 ModuleManager  会在 "module/<YourModuleName>"  目录下寻找  "Module.php"  来加载和配置一个 module。这里 module的名字、 namespace 的名字、文件夹的文字保持一致。下面我们都以 Album 来表示一个示例的module。

* zf2 的 ModuleManager 在加载module时会自动调用 Module.php 中的 getAutoloaderConfig() 和 getConfig()。在这两个方法内,我们要完成对这个module的一些配置。

 

(zf2.ModuleManager) module/Album/Module.php  --->  getAutoloaderConfig() +  getConfig()

 

1.2) Autoloading files:

* Module.php 中的 getAutoloaderConfig() 需要返回一个与 zf2 的 AutoloaderFactory 相兼容的 array。

这里我们添加一个 class map file 并赋值给 ZendLoaderClassMapAutoloader;同时将这个module的 namespace 赋值给 ZendLoaderStandardAutoloader(StandardAutoloader需要一个namespace 和 寻找这个namespace所包含的文件的路径)。这样我们就注册了 autoloader,等着系统来加载相关信息。

 

getAutoloaderConfig():

zf2.AutoloaderFactory  --->  array  --->  

     autoload_classmap.php  =>   ZendLoaderClassMapAutoloader

               +

     namespace =>  ZendLoaderStandardAutoloader

 

1.3) Configuration:

* Module.php 中的 getConfig() 会去加载 Album/config/module.config.php 这个文件。

在这个文件中的配置信息会由 zf2 的 ServiceManager 来传递给相关的组件。在这里需要初始化的内容是:

controllers  和  view_manager。

controllers :  列出所有这个module 所提供的 controllers。

view_manager : 该module 的 view directory(存放前端页面代码)的路径。 这个路径会被添加到 zf2 的 TemplatePathStack 。这样便可以使系统找到 Album 这个module的view scripts。

 

getConfig():

controllers : (zf2.ServiceManager) AlbumController*Controller

          +

view_manager : (zf2.TemplatePathStack)  <view directory>

 

1.4) Inform the application about our new module:

* 在整个项目中注册新添加的 Album 这个 module。这样 ModuleManager 就能知道了。

在 config/application.config.php 的 modules 这个 array 中添加 Album。

 

(ModuleManager) config/application.config.php : modules += Album

 

2. 添加 actions、view scripts ,并配置 routing and controllers.

 

2.1) 在 Album/config/module.config.php 配置相应的路由规则来映射 URL 和 对应的action。

*如:

      'router' => array (

        'routes' => array (

            'album' => array (

                'type'    => 'segment',

                'options' => array (

                    'route'    => '/album[/:action][/:id]',

                    'constraints' => array (

                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',

                        'id'     => '[0-9]+',

                    ),

                    王中王开奖一马中特,'defaults' => array (

                        'controller' => 'AlbumControllerAlbum',

                        'action'     => 'index',

                    ),

                ),

            ),

        ),

    ),

 

*这里这个名为 'album' 的route 的类型是 'segment' ,它允许我们在 URL pattern 中指定占位符。比如:

     '/album[/:action][/:id]'

这种。

* '[ ]' 表示其中的内容是 optional 的; ':action' 表示这是一个变量,后面将可以对其定义,如:

     'action' => '[a-zA-Z][a-zA-Z0-9_-]*',

*This route allows us to have the following URLs:

URL Page Action
/album Home (list of albums) index
/album/add Add new album add
/album/edit/2 Edit album with an id of 2 edit
/album/delete/4 Delete album with an id of 4 delete

*  'controller' => 'AlbumControllerAlbum',  // 这样将controller做了指定。

前面我们已经这样

 'controllers' => array(

        'invokables' => array (

            'AlbumControllerAlbum' => 'AlbumControllerAlbumController' ,

        ),

    ),

注册过这个controller了。

 

2.2) 创建相应的 Controller 。

* zf2 中, controller是一个名为  {ControllerName}Controller 的class。

*  'controller' => 'AlbumControllerAlbum',  则其对应的controller为 'AlbumControllerAlbumController'. 对应的文件是 module/Album/Controller/AlbumController.php。

* 每个 action 是在AlbumController.php中的一个方法,其命名应为 {actionName}Action.

* Controller 类 需要 implement 'ZendStdlibDispatchable' interface. 通常我们可以 extends 'ZendMvcControllerAbstractActionController' 或 'ZendMvcControllerAbstractRestfulController'(用于 RESTful webservice) 这两个 abstract class 来达到目的。

* 那我们的controller看起来就类似这样:

<?php

namespace AlbumController;

 

use ZendMvcControllerAbstractActionController;

use ZendViewModelViewModel;

 

class AlbumController extends AbstractActionController

{

    public function indexAction()

    {

    }

 

    public function addAction()

    {

    }

 

    public function editAction()

    {

    }

 

    public function deleteAction()

    {

    }

}

 

* The URLs for each action are:

URL Method called
http://zf2-tutorial.localhost/album AlbumControllerAlbumController::indexAction
http://zf2-tutorial.localhost/album/add AlbumControllerAlbumController::addAction
http://zf2-tutorial.localhost/album/edit AlbumControllerAlbumController::editAction
http://zf2-tutorial.localhost/album/delete AlbumControllerAlbumController::deleteAction

2.3) 创建相应的views。

* These view scripts are stored in our module’s views directory within a directory named after the controller.

* 如下文件将被 zf2.DefaultViewStrategy 来执行。同时,从 controller action method 返回的各种值都会被传递到对应的 view page 去。

module/Album/view/album/album/index.phtml

module/Album/view/album/album/add.phtml

module/Album/view/album/album/edit.phtml

module/Album/view/album/album/delete.phtml

 

3. 添加数据库和models。

 

3.1) 创建针对实体类 Album 的数据访问层类 AlbumTable.

*使用 zf2 的 ZendDbTableGatewayTableGateway 可以来跟数据库的数据表进行交互。

通常封装‘数据访问层’时可以用到这个。这里我们创建一个 AlbumTable.php 来做这个工作。

*Album 的实体类,Album.php. 为了能和 TableGateway 一起工作,需要在 Album 实体类中实现 exchangeArray() 方法。

*例:AlbumTable 类中的一些方法:

 

        protected $tableGateway;

 

    public function __construct(TableGateway $tableGateway)

    {

        $this->tableGateway = $tableGateway;

    }

          

         public function getAlbum($id)

    {

        $id  = (int) $id;

        $rowset = $this->tableGateway->select(array('id' => $id));

        $row = $rowset->current();

        if (!$row) {

            throw new Exception("Could not find row $id");

        }

        return $row;

    }

 

3.2) 使用 ServiceManager 来配置 TableGateway 从而实现向 AlbumTable 注入 TableGateway.

* 在 module/Album/Module.php 中新建 getServiceConfig() 方法,这个方法将会被 ModuleManager 自动调用,并被 applied to ServiceManager。

如:

    public function getServiceConfig()

    {

        return array (

            'factories' => array (

                'AlbumModelAlbumTable' =>  function($sm) {

                    $tableGateway = $sm ->get('AlbumTableGateway');

                    $table = new AlbumTable($tableGateway);

                    return $table ;

本文由493333王中王开奖结果发布于网络频道,转载请注明出处:Yii CGridView columns利用数组或变量传值

关键词: