本文总结了YiiFramework入门知识点。分享给大家供大家参考,具体如下:
创建Yii应用骨架
web为网站根目录
yiic webapp /web/demo
通过GII创建model和CURD时需要注意
1、Model Generator 操作
即使在有表前缀的情况下,Table Name中也要填写表的全名,即包括表前缀。如下图:
2、Crud Generator 操作
该界面中,Model Class中填写model名称。首字母大写。也可参照在生成model时,在proctected/models目录中通过model generator生成的文件名。如下图:
如果对news、newstype、statustype这三个表生成CURD控制器,则在Model Generator中,在Model Class中输入:News、newsType、StatusType。大小写与创建的文件名的大小写相同。如果写成NEWS或NeWs等都不可以。
创建模块注意事项
通过GII创建模块,Module ID一般用小写。无论如何,这里填写的ID决定main.php配置文件中的配置。如下:
'modules'=>array( 'admin'=>array(//这行的admin为Module ID。与创建Module时填写的Module ID大写写一致 'class'=>'application.modules.admin.AdminModule',//这里的admin在windows os中大小写无所谓,但最好与实际目录一致。 ), ),
路由
system表示yii框架的framework目录
application表示创建的应用(比如d:\wwwroot\blog)下的protected目录。
application.modules.Admin.AdminModule
表示应用程序目录(比如:d:\wwwroot\blog\protected)目录下的modules目录下的Admin目录下的AdminModules.php文件(实际上指向的是该文件的类的名字)
system.db.*
表示YII框架下的framework目录下的db目录下的所有文件。
控制器中的accessRules说明
/** * Specifies the access control rules. * This method is used by the 'accessControl' filter. * @return array access control rules */ public function accessRules() { return array( array('allow', // allow all users to perform 'index' and 'view' actions 'actions'=>array('index','view'),//表示任意用户可访问index、view方法 'users'=>array('*'),//表示任意用户 ), array('allow', // allow authenticated user to perform 'create' and 'update' actions 'actions'=>array('create','update'),//表示只有认证用户才可操作create、update方法 'users'=>array('@'),//表示认证用户 ), array('allow', // allow admin user to perform 'admin' and 'delete' actions 'actions'=>array('admin','delete'),//表示只有用户admin才能访问admin、delete方法 'users'=>array('admin'),//表示指定用户,这里指用户:admin ), array('deny', // deny all users 'users'=>array('*'), ), ); }
看以上代码注释。
user: represents the user session information.详情查阅API:CWebUser
CWebUser代表一个Web应用程序的持久状态。
CWebUser作为ID为user的一个应用程序组件。因此,在任何地方都能通过Yii::app()->user 访问用户状态
public function beforeSave() { if(parent::beforeSave()) { if($this->isNewRecord) { $this->password=md5($this->password); $this->create_user_id=Yii::app()->user->id;//一开始这样写,User::model()->user->id;(错误) //$this->user->id;(错误) $this->create_time=date('Y-m-d H:i:s'); } else { $this->update_user_id=Yii::app()->user->id; $this->update_time=date('Y-m-d H:i:s'); } return true; } else { return false; } }
getter方法或/和setter方法
<"htmlcode">public function beforeSave() { if(parent::beforeSave()) { if($this->isNewRecord) { $this->password=md5($this->password); $this->create_user_id=Yii::app()->user->id;//====主要为此句。得到登陆帐号的ID $this->create_time=date('Y-m-d H:i:s'); } else { $this->update_user_id=Yii::app()->user->id; $this->update_time=date('Y-m-d H:i:s'); } return true; } else { return false; } }更多相关:
/* 由于CComponent是post最顶级父类,所以添加getUrl方法。。。。如下说明: CComponent 是所有组件类的基类。 CComponent 实现了定义、使用属性和事件的协议。 属性是通过getter方法或/和setter方法定义。访问属性就像访问普通的对象变量。读取或写入属性将调用应相的getter或setter方法 例如: $a=$component->text; // equivalent to $a=$component->getText(); $component->text='abc'; // equivalent to $component->setText('abc'); getter和setter方法的格式如下 // getter, defines a readable property 'text' public function getText() { ... } // setter, defines a writable property 'text' with $value to be set to the property public function setText($value) { ... } */ public function getUrl() { return Yii::app()->createUrl('post/view',array( 'id'=>$this->id, 'title'=>$this->title, )); }模型中的rules方法
/* * rules方法:指定对模型属性的验证规则 * 模型实例调用validate或save方法时逐一执行 * 验证的必须是用户输入的属性。像id,作者id等通过代码或数据库设定的不用出现在rules中。 */ /** * @return array validation rules for model attributes. */ public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array('news_title, news_content', 'required'), array('news_title', 'length', 'max'=>128), array('news_content', 'length', 'max'=>8000), array('author_name, type_id, status_id,create_time, update_time, create_user_id, update_user_id', 'safe'), // The following rule is used by search(). // Please remove those attributes that should not be searched. array('id, news_title, news_content, author_name, type_id, status_id, create_time, update_time, create_user_id, update_user_id', 'safe', 'on'=>'search'), ); }说明:
1、验证字段必须为用户输入的属性。不是由用户输入的内容,无需验证。
2、数据库中的操作字段(即使是由系统生成的,比如创建时间,更新时间等字段——在boyLee提供的yii_computer源码中,对系统生成的这些属性没有放在safe中。见下面代码)。对于不是表单提供的数据,只要在rules方法中没有验证的,都要加入到safe中,否则无法写入数据库。yii_computer的News.php模型关于rules方法
/** * @return array validation rules for model attributes. */ public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array('news_title, news_content', 'required'), array('news_title', 'length', 'max'=>128, 'encoding'=>'utf-8'), array('news_content', 'length', 'max'=>8000, 'encoding'=>'utf-8'), array('author_name', 'length', 'max'=>10, 'encoding'=>'utf-8'), array('status_id, type_id', 'safe'), // The following rule is used by search(). // Please remove those attributes that should not be searched. array('id, news_title, news_content, author_name, type_id, status_id', 'safe', 'on'=>'search'), ); }视图中显示动态内容三种方法
1、直接在视图文件中以PHP代码实现。比如显示当前时间,在视图中:复制代码 代码如下:<"Y-m-d H:i:s");"htmlcode">
$theTime=date("Y-m-d H:i:s"); $this->render('helloWorld',array('time'=>$theTime));视图文件:
复制代码 代码如下:<"htmlcode">$Prerfp = Prerfp::model()->findAll( array( 'limit'=>'5', 'order'=>'releasetime desc' ) );$model = Finishrfp::model()->findAll( array( 'select' => 'companyname,title,releasetime', 'order'=>'releasetime desc', 'limit' => 10 ) ); foreach($model as $val){ $noticeArr[] = " 在".$val->title."竞标中,".$val->companyname."中标。"; }$model = Cgnotice::model()->findAll ( array( 'select' => 'status,content,updatetime', 'condition'=> 'status = :status ', 'params' => array(':status'=>0), 'order'=>'updatetime desc', 'limit' => 10 ) ); foreach($model as $val){ $noticeArr[] = $val->content; }$user=User::model()->find('LOWER(username)="htmlcode">$noticetype = Dictionary::model()->find(array( 'condition' => '`type` = "noticetype"') );// 查找postID=10 的那一行 $post=Post::model()->find('postID=:postID', array(':postID'=>10));也可以使用$condition 指定更复杂的查询条件。不使用字符串,我们可以让$condition 成为一个CDbCriteria 的实例,它允许我们指定不限于WHERE 的条件。例如:
$criteria=new CDbCriteria; $criteria->select='title'; // 只选择'title' 列 $criteria->condition='postID=:postID'; $criteria->params=array(':postID'=>10); $post=Post::model()->find($criteria); // $params 不需要了注意,当使用CDbCriteria 作为查询条件时,$params 参数不再需要了,因为它可以在CDbCriteria 中指定,就像上面那样。
一种替代CDbCriteria 的方法是给find 方法传递一个数组。数组的键和值各自对应标准(criterion)的属性名和值,上面的例子可以重写为如下:
$post=Post::model()->find(array( 'select'=>'title', 'condition'=>'postID=:postID', 'params'=>array(':postID'=>10), ));其它
1、链接
复制代码 代码如下:<span class="tt"><"codetitle">复制代码 代码如下:<span class="tt"><a target="_blank" title="<" href="<" ><"codetitle">复制代码 代码如下:<"//img.jbzj.com/file_images/article/201512/20151228144015453.jpg" alt="" />打开protected/components下的Notice.php文件,内容如下:
<"color: #ff6600">CPortlet获取当前host
Yii::app()->request->getServerName(); //and $_SERVER['HTTP_HOST']; $url = 'http://'.Yii::app()->request->getServerName(); $url .= CController::createUrl('user/activateEmail', array('emailActivationKey'=>$activationKey)); echo $url;关于在发布新闻时添加ckeditor扩展中遇到的情况
$this->widget('application.extensions.editor.CKkceditor',array( "model"=>$model, # Data-Model "attribute"=>'news_content', # Attribute in the Data-Model "height"=>'300px', "width"=>'80%', "filespath"=>Yii::app()->basePath."/../up/", "filesurl"=>Yii::app()->baseUrl."/up/", );echo Yii::app()->basePath
如果项目目录在:d:\wwwroot\blog目录下。则上面的值为d:\wwwroot\blog\protected。注意路径最后没有返斜杠。
echo Yii::app()->baseUrl;
如果项目目录在:d:\wwwroot\blog目录下。则上面的值为/blog。注意路径最后没有返斜杠。
(d:\wwwroot为网站根目录),注意上面两个区别。一个是basePath,一个是baseUrl
其它(不一定正确)
在一个控制器A对应的A视图中,调用B模型中的方法,采用:B::model()->B模型中的方法名();
前期需要掌握的一些API
CHtml希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。