public function searchWithRelated() { 
        $criteria = new CDbCriteria;

$criteria->together = true; //without this you wont be able to search the second table's data 
        $criteria->with = array('mySecondTable'); 
        $criteria->compare('id', $this->id, true); 
        $criteria->compare('mySecondTable.column', $this->mySecondTable_column, true);

return new CActiveDataProvider($this, array( 
            'criteria' => $criteria, 
            'sort'=>array( 
               'defaultOrder'=>'t.create_time DESC', 
            ), 
            'pagination' => array( 
                'pageSize' => 100, 
            ), 
        )); 
    }

高级应用程序模板
这个模板用在大型的团队开发项目中,而且后台从前台独立分离出来以便于部署在多个服务器中。由于YIi2.0的一些新的特性,这个程序模板的功能要更深一点。提供了基本的数据库的支持,注册、密码找回等功

可以通过Composer来安装
如果没有安装Composer,先安装

  1. curl -s http://getcomposer.org/installer | php

然后用如下命令来获取

  1. php composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-advanced /path/to/yii-application

也可以直接下载压缩文件:Yii 2 with advanced application template(beta)
https://github.com/yiisoft/yii2/ ... -app-2.0.0-beta.tgz

开始

安装完成后,需要对其进行初始化操作。

  • 执行init,选择开发环境(dev)

    1. php /path/to/yii-application/init
  • 创建新的数据库,设置common/config/main-local.php里的components.db数据库信息
  • 使用控制台命令迁移数据库
    1. yii migrate
  • 设置web服务器的根目录
    前台/path/to/yii-application/frontend/web/对应的url为http://frontend/
    后台/path/to/yii-application/backend/web/对应的url为http://backend/

目录结构

在根目录下面有这几个子目录

  • backend——后台web程序
  • common——公共的文件
  • console——控制台程序
  • environments——环境配置
  • frontend——前台web程序

根目录下面还有包含一些文件

  • .gitignore ——git版本控制中忽略的文件和目录,如果你有一些你不想要的文件到你的源代码里面就把它添加到这个文件中。
  • composer.json——这个下面会描述
  • init——在Composer里面所描述初始化脚本
  • init.bat——和上面一样,不过是Windows下面的
  • LIENSE.md——这个就不说了
  • README.md——同上
  • requirements.php——Yii运行环境要求检测文件
  • yii——控制台程序引导文件
  • yii.bat——Windows下面的东东

系统定义的路径别名

  • @yii ——框架的目录。
  • @app——当前正在运行的应用程序的基本路径。
  • @common -公共文件目录。
  • @frontend——前端web应用程序目录。
  • @backend ——后端web应用程序目录。
  • @console -控制台目录。
  • @runtime——当前正在运行的web应用程序的运行时目录
  • @vendor ——基础框架目录。
  • @web ——当前正在运行的web应用程序的url
  • @webroot——当前正在运行的web应用程序的web根目录。

应用程序

这个模板包含三个应用程序,前台、后台和控制台。前台通常来说就是展现给终端用户的,也就是项目本身。后台就是管理员控制面板,包含有分析以及类似的功能等。控制台主要用来做一些定时任务和一些简单的服务器的管理,另外也可以用来部署应用程序、数据库的迁移、资源的管理等。

common 目录提供一些公共的文件,可用于多个应用程序,例如User模型。

前台和后台都是web应用程序,他们都包含一个web目录,也就是web的根目录,在部署服务器的时候就得要指向这个目录。
每个应用程序都有他们自己的命名空间以及对应的别名。同理,common也有自己的命名空间和对应的别名。

配置和开发环境

在平常的开发中,直接设置配置文件会有多个问题

  • 每个团队成员都有自己的配置选项。如果提交这样的配置将影响其他团队成员。
  • 产品数据库密码和API密钥不应该在代码仓库中。
  • 在有多个服务器的情况下:开发、测试、生产,每一个服务器都应该有自己的配置。
  • 每种情况下都定义所有配置选项很重复,并且还要花太多的时间去维持它。

为了解决这些问题,Yii引入了一个非常简单的环境的概念。每个环境由环境目录下的一组文件的集合来表示。init命令用于不同环境之间切换。它只是复制从环境目录中所有应用程序的根目录。

通常环境包含应用程序引导文件如index.php和以-local.php后缀的配置文件。这些已经添加到.gitignore中,所以不会再添加到源码仓库中。
为了避免重复的配置文件相互覆盖。例如,前台应用程序按照以下顺序来读取配置:

  • common/config/main.php
  • common/config/main-local.php
  • frontend/config/main.php
  • frontend/config/main-local.php

参数文件按以下顺序读取

  • common/config/params.php
  • common/config/params-local.php
  • frontend/config/params.php
  • frontend/config/params-local.php

后面读取的文件配置会覆盖前面的配置

整个的流程图形如下

配置 Composer

应用程序安装完成后就可以设置要目录下面的composer.json

  1. {
  2. "name": "yiisoft/yii2-app-advanced",
  3. "description": "Yii 2 Advanced Application Template",
  4. "keywords": ["yii", "framework", "advanced", "application template"],
  5. "homepage": "http://www.yiiframework.com/",
  6. "type": "project",
  7. "license": "BSD-3-Clause",
  8. "support": {
  9. "issues": "https://github.com/yiisoft/yii2/issues?state=open",
  10. "forum": "http://www.yiiframework.com/forum/",
  11. "wiki": "http://www.yiiframework.com/wiki/",
  12. "irc": "irc://irc.freenode.net/yii",
  13. "source": "https://github.com/yiisoft/yii2"
  14. },
  15. "minimum-stability": "dev",
  16. "require": {
  17. "php": ">=5.4.0",
  18. "yiisoft/yii2": "*",
  19. "yiisoft/yii2-swiftmailer": "*",
  20. "yiisoft/yii2-bootstrap": "*",
  21. "yiisoft/yii2-debug": "*",
  22. "yiisoft/yii2-gii": "*"
  23. },
  24. "scripts": {
  25. "post-create-project-cmd": [
  26. "yii\\composer\\Installer::setPermission"
  27. ]
  28. },
  29. "extra": {
  30. "writable": [
  31. "backend/runtime",
  32. "backend/web/assets",
  33. "console/runtime",
  34. "console/migrations",
  35. "frontend/runtime",
  36. "frontend/web/assets"
  37. ]
  38. }
  39. }

首先,修改一些基本信息。例如名称,描述,关键词,主页等等。
你还可以根据你的需要添加更多的应用程序。这些包都是来自packagist.org,可免费的浏览所有的代码。
修改完composer.json之后 就可以运行

  1. php composer.phar update --prefer-dist

,等下载并安装完成后就可以开始使用了。自动加载的类将会自动处理。

创建从后端到前端的链接

  通常情况下需要从后端应用程序连接到前端应用程序。因为前端应用程序可能包含自己的URL管理规则,所以需要再添加一个不同名字的后台的URL管理规则。

  1. return [
  2. 'components' => [
  3. 'urlManager' => [
  4. // here is your normal backend url manager config
  5. ],
  6. 'urlManagerFrontend' => [
  7. // here is your frontend URL manager config
  8. ],
  9. ],
  10. ];

之后,就可以像这样来使用前台的url

Reference: Learn Yii Framework online – CGridView filter with relational field

Model:

1. 添加filter用的属性
var $a = “”;
var $b = “”;

2. 修改rules方法中的配置
array(‘……., a, b’, ‘safe’, ‘on’=>’search’);

3. 注意relations方法
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
‘xxx‘ => array(self::HAS_ONE,  ‘xxxModel’, array(‘…’ => ‘….’)),
);
}

4. 修改search()方法添加行
$criteria->compare(‘xxx.ax‘,$this->a);
$criteria->compare(‘xxx.bx‘,$this->b);

View
1. ‘dataProvider’=>$model->with(“xxx“)->search(),

2. 列展示修改
array(
‘name’ => ‘a‘,
‘value’ => ‘$data->xxx->ax‘,
‘filter’ => array(select的下来菜单数组),
),
array(
‘name’ => ‘b‘,
‘value’ => ‘$data->xxx->bx‘,
‘filter’ => array(1 => “Set”, 0 => ‘Not Set’),
),

代码提示:
1. 添加的两个属性仅仅用于记录页面的搜索条件
2. search方法中的CDbCriteria搜索方法没有任何变化,请学习如何使用关联搜索

$criteria = new CDbCriteria; 
//select
$criteria->select = '*';//默认*
$criteria->select = 'id,name';//指定的字段
$criteria->select = 't.*,t.id,t.name';//连接查询时,第一个表as t,所以用t.*
$criteria->distinct = FALSE; //是否唯一查询

//join
$criteria->join = 'left join table2 t2 on(t.id=t2.tid)'; //连接表  
$criteria->with = 'xxx'; //调用relations

//where 查询数字字段
$criteria->addCondition("id=1"); //查询条件,即where id = 1  
$criteria->addBetweenCondition('id', 1, 4);//between 1 and 4     
$criteria->addInCondition('id', array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);  
$criteria->addNotInCondition('id', array(1,2,3,4,5));//与上面正好相法,是NOT IN

//where 查询字符串字段
$criteria->addSearchCondition('name', '分类');//搜索条件,其实代表了。。where name like '%分类%' 
 
//where 查询日期字段
$criteria->addCondition("create_time>'2012-11-29 00:00:00'");
$criteria->addCondition("create_time<'2012-11-30 00:00:00'");

//where and or
$criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND

//这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,
//即如果第二个参数是数组就会调用addInCondition

$criteria->compare('id', 1);    
/**  * 传递参数 */

$criteria->addCondition("id = :id");  
$criteria->params[':id']=1;

//order 
$criteria->order = 'xxx DESC,XXX ASC' ;//排序条件

//group
$criteria->group = 'group 条件';  
$criteria->having = 'having 条件 ';

//limit
$criteria->limit = 10;    //取1条数据,如果小于0,则不作处理  
$criteria->offset = 1;   //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'chapter-grid',
'dataProvider'=>$model->search(), //数据结果集
'filter'=>$model,
'columns'=>array(
'id',
//锚点<a href="http://www.gulianqiang.com/"></a>
array(
'name'=>'name',
'type'=>'raw',
'value'=>'CHtml::link($data->name,"/book/$data->id")',
),
//图片
array(
'name'=>'image',
'type'=>'image',
'value'=>'LImages::getPath("book").$data->image',//图片相对路径
),
//下拉列表
array(
'name'=>'type',
'value'=>'Lookup::item("chapterType",$data->type)',
'filter'=>Lookup::items('chapterType'),
),
//内容截取
array(
'name'=>'content',
'type'=>'html',
'value'=>'mb_substr(htmlspecialchars_decode($data->content),0,100,"utf-8")',
),
//时间
array(
'name'=>'create_time',
'type'=>'datetime',
),
// 根据相关信息读数据库
array(
'name'=>'user_id',
'value'=>'User::model()->findbyPk($data->user_id)->username',
'filter'=>false,
),
array(
'class'=>'CButtonColumn',
),
),
)); ?>

yii2高级应用的更多相关文章

  1. yii2高级版账号密码问题

    yii2高级版默认后台没有密码,生成账号密码步骤: 1. CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` ...

  2. Yii2高级版本复制新项目出现问题解决(转)

    引用于 http://www.linuxidc.com/Linux/2015-02/114116.htm Yii2高级版本复制新项目会遇到下面的报错信息: exception 'yii\base\In ...

  3. Yii2 高级模板不使用Apache配置目录,将前后台入口移到根目录

    刚刚入手Yii2高级模板不久,部署项目时,得部署2个应用,个人感觉很繁琐,就将前后台入口文件全部拿到项目根目录.但是一看,完了,出错了!找教程找不到,还是自己解决吧 为了以后好升级,不改变Yii2核心 ...

  4. Yii2高级模板vendor和application非同级目录部署

    上面是Yii2的高级模板,当我们有多个application的时候,这种高级模板可以可以提供很好的扩展性,多个application共用一份YII2框架,默认情况下,框架和application是在同 ...

  5. yii2高级模板使用一个域名管理前后台

    yii2的高级模板分为backend和frontend,最开始用yii的时候并没怎么在意,就使用了两个域名分别解析前后台.今天无意间看见 可以使用一个域名指向前后台. 1.修改 advanced/ba ...

  6. Yii2高级模板的安装

    1.通过composer 安装高级版 C:wampwwwyii>composer create-project --prefer-dist yiisoft/yii2-app-advanced a ...

  7. windows 下安装Yii2 高级版本

    1.  首先安装 Composer 2.  执行  composer global require "fxp/composer-asset-plugin:~1.1.1" 3. 执行 ...

  8. yii2高级模板安装

    通过 Composer 安装 如果还没有安装 Composer,在 Linux 和 Mac OS X 中可以运行如下命令: curl -sS https://getcomposer.org/insta ...

  9. Yii2 高级查询

    首先我们要自己写一个ActiveQuery 类并且继承 Yii2 的 ActiveQuery: namespace api\models; class ActiveQuery extends \yii ...

随机推荐

  1. 利用扩展事件(Xevents)捕捉高消耗查询

    生产环境中有时需要使用者抓取一些特定的语句分析,如超超长查询,或高IO查询等.一般来说大家对跟踪比较熟悉,主要因为其有完善的UI支持.由于扩展事件在sql2012才提供UI支持,所以虽然在08时就已经 ...

  2. Print2flash在.NET(C#)中的使用,即文档在线预览

    office文档(word,excel,ppt)在线预览查看,有很多种方式,比如可以 1.调用weboffice组件,进行word预览,要求客户端安装word,仅适用IE, word2013, IE1 ...

  3. C#学习之Linq to Xml

    前言 我相信很多从事.NET开发的,在.NET 3.5之前操作XML会比较麻烦,但是在此之后出现了Linq to Xml,而今天的主人公就是Linq to Xml,废话不多说,直接进入主题. 题外:最 ...

  4. windows下重启mysql

    其中第二种方法对我这无效,以后再搞清楚! 一.MYSQL服务 我的电脑——(右键)管理——服务与应用程序——服务——MYSQL——开启(停止.重启动) 二.命令行方式 Windows 1.点击“开始” ...

  5. Twitter API升级至1.1

    Twitter API 1.1是至今最大的一次升级,从3月份提出,到6月11日1.0版本已经全面停止调用.关于1.1版本升级特性可访问: https://dev.twitter.com/docs/ap ...

  6. SharePoint Client Object Model API 介绍以及工作原理解析

    CSOM和ServerAPI 的对比 SharePoint从2010开始引入了Client Object Model的API(后文中用CSOM来代替),从名字来看,我们可以简单的看出,该API是面向客 ...

  7. iOS-项目打包为ipa文件

    最近自己做的一个项目,由于app store发布流程比较复杂,且审核周期较长,客户希望提前能看到产品,所以我先给自己的项目打包成一个ipa文件(类似Android的apk安装包),然后发布在" ...

  8. WebView上实现Java与JavaScript交互

    在安卓开发上,考虑到开发效率和界面更新,有时使用WebView结合web页面技术,可以快速迭代地开发移动应用.WebView加载资源的速度并不慢,但是如果资源多了,就很慢.图片.css.js.html ...

  9. 动软商城系统可免费下载了,专业批发分销商城系统,ASP.NET商城系统

    动软商城系统是一套集CMS资讯+品牌Shop商城+WAP商城+APP手机客户端+SNS用户互动社区于一体的全新电商营销解决方案.主要为企业树立企业品牌形象,实现独立网络推广,充分集成网站SEO.企业微 ...

  10. Winform TreeView 查找下一个节点

    转载:http://www.cnblogs.com/Ruiky/archive/2013/02/01/2888674.html public static class TreeViewHelper { ...