天天看点

YII 快速创建项目GII

yii 是一个基于组件、纯oop的、用于开发大型 web 应用的高性能php框架。

它将web编程中的可重用性发挥到极致,能够显著加速开发进程 。

yii适合大流量的应用,如门户、bbs、cms及b2b系统等,功能丰富,性能优异

1.在环境变量里添加 e:\yii framework;

2.在环境变量里添加 e:\wamp\bin\php(不添加提示php.exe不是内部命令)或yiic.bat中php_command= e:\wamp\bin\php.exe

为了使用上面提到的 <code>yiic</code> 工具,cli php 程序必须在命令搜索路径内(译者注:即php.exe 所在的目录必须在path环境变量中 ),注销后path配置会生效

1.通过cmd自动化的代码生成项目骨架

YII 快速创建项目GII

% cd webroot  

% php yiiroot/framework/yiic webapp "e:\apache2\htdocs\test"  

建立数据库连接

要在我们创建的程序骨架中使用这个数据库,我们需要修改它的应用配置 ,它保存在php脚本/protected/config/main.php 中。

执行data/schema.sqlite.sql脚本,连接sqlite配置

YII 快速创建项目GII

'db'=&gt;array(  

    'connectionstring' =&gt; 'sqlite:protected/data/blog.db',  

    'tableprefix' =&gt; 'tbl_',  

),  

YII 快速创建项目GII

    'connectionstring' =&gt; 'mysql:host=localhost;dbname=blog',  

    'emulateprepare' =&gt; true,  

    'username' =&gt; 'root',  

    'password' =&gt; '',  

    'charset' =&gt; 'utf8',  

2.创建,读取,更新,删除 (crud) 是应用的数据对象中的四个基本操作。由于在web应用的开发中实现curd的任务非常常见,yii 为我们提供了一些可以使这些过程自动化的代码生成工具,名为 gii

首先我们需要安装 gii. 打开文件<code>protected/config/main.php</code> ,添加如下代码:

YII 快速创建项目GII

'import'=&gt;array(  

    'application.models.*',  

    'application.components.*',  

'modules'=&gt;array(  

    // uncomment the following to enable the gii tool  

    'gii'=&gt;array(  

        'class'=&gt;'system.gii.giimodule',  

        'password'=&gt;'sa',  

        //ipfilters用于所在服务器不在本机的情况需开启    

        //'ipfilters'=&gt;array('192.168.1.10','::1'),    

    ),        

上面的代码安装了一个名为 gii 的模块,这样我们就可以通过在浏览器中浏览如下url来访问 gii 模块:

http://localhost/test/index.php?r=gii,在弹出的窗口中输入sa。如下图 

YII 快速创建项目GII

创建模型 model

首先我们需要为每个数据表创建一个模型(model)类 。模型类会使我们可以通过一种直观的、面向对象的风格访问数据库。稍后我们将会看到这一点。视图可以生成model,视图没有主键model需要加入primarykey方法

点击 model generator 链接开始使用模型创建工具。

在 model generator 页中,在table name一栏输入 tbl_user (用户表的名字),

然后按下 preview 按钮。一个预览表将显示在我们面前。我们可以点击表格中的链接来预览要生成的代码。如果一切ok,

我们可以按下 generate 按钮来生成代码并将其保存在一个文件中。

生成的protected/models/user.php包含了继承自 cactiverecord 的 user 类,可用于访问 tbl_user 数据表;

实现crud操作 

模型类建好之后,我们就可以使用 crud generator来创建为这些模型实现crud操作的代码了。我们将对user模型执行此操作。

在 crud generator 页面中,model class 一栏输入user(就是我们刚创建的user模型的名字models/user.php) ,然后按下 preview 按钮。

我们会看到有很多文件将被创建。按下generate按钮来创建它们。

这样,我们就使用 yiic工具 生成了对于user表的增删改查。使用

YII 快速创建项目GII

http://localhost/test/index.php?r=user   

访问下,试试

多模块(modules)设计

选择module generator--&gt;在module id 输入框中输入要添加的模块(例如test)--&gt;点击preview按钮--&gt;点击generate按钮.至此,test模块便添加完成。对应目录为/protected/modules/test目录

新加模块访问地址为:http://website/index.php?r=test

(中级)自定义gii生成代码模板

我们使用一个例子来介绍如何定制代码模板。假设我们想要定制由 model 生成器生成的代码。

我们首先创建一个名为 protected/gii/model/templates/customer 的目录。这里的model意味着我们将要 override 默认的 model 生成器。templates/customer意味着我们将增加一个新的代码模板集名为customer。复制文件 framework/gii/generators/model/templates/default/model.php 到 protected/gii/model/templates/customer。现在是时候做点真正的工作了。打开文件 protected/gii/model/templates/customer/model.php 以编辑它。记得这个文件将作为类似一个视图文件被使用,意味着它可以包含 php 表达式和语句。让我们更改模板以便生成的代码里 attributelabels() 方法使用 yii::t() 来翻译属性标签:

YII 快速创建项目GII

public function attributelabels()  

{  

    return array(  

&lt;?php foreach($labels as $name=&gt;$label): ?&gt;  

            &lt;?php echo "'$name' =&gt; yii::t('application', '$label'),\n"; ?&gt;  

&lt;?php endforeach; ?&gt;  

    );  

}  

在每个代码模板中,我们可以访问一些预定义的变量,例如上面例子中的 <code>$labels</code> 。这些变量由对应的代码生成器提供。不同的代码生成器可能在他们的代码模板中提供不同的变量。请认真阅读默认代码模板中的描述。

现在打开 model 代码生成器页面。点击 code template 输入框。我们应当看到一个下拉列表 ,这个列表包含了我们新建的模板目录 customer。我们选择此模板生成代码文件。

框架生成controller的模板为:framework/gii/generators/controller/templates/default/controller.php

框架生成model的模板为:framework/gii/generators/model/templates/default/model.php

(高级 )创建新的生成器

在framework/gii/generators创建widget文件夹,可以编写支持module的crud generator,moduleid下model class的写法application.modules.moduleid.models.modelclass 

YII 快速创建项目GII

可以把自己扩展的gii放到项目目录下面,配置如下

YII 快速创建项目GII

'modules' =&gt; array(  

    'gii' =&gt; array(  

        'class' =&gt; 'system.gii.giimodule',  

        'password' =&gt; 'gii',  

        'generatorpaths' =&gt; array(  

            'application.gii.generators',//项目目录结构  

        ),  

        'ipfilters' =&gt; array('127.0.0.1', '::1'),  

    ),  

上面的配置告诉 gii在别名是application.gii.generators的目录中寻找生成器,以及默认的framework位置system.gii.generators在不同的搜索路径有同名的生成器也是可以的。这种情况下,在giimodule::generatorpaths 指定目录中先出现的生成器有优先权 。