宝哥软件园

YiiFramework入门知识点总结(图文教程)

编辑:宝哥软件园 来源:互联网 时间:2021-09-19

本文总结了YiiFramework的知识点。分享给大家参考,如下:

创建Yii应用程序骨架。

web根目录是yiic webapp /web/demo。

通过GII创建模型和凝乳时需要注意。

1.模型生成器操作。

即使有表前缀,也应该在表名中填写表的全名,即应该包含表前缀。下图:

2.积垢发生器操作。

在此界面中,在模型类中填写模型名称。首字母大写。生成模型时,还可以参考procted/models目录中模型生成器生成的文件名。下图:

如果为三个表新闻、新闻类型和状态类型生成了凝乳控制器,请在模型生成器的模型类中输入:新闻、新闻类型和状态类型。大小写与创建的文件名相同。你不能把它写成NEWS或NeWs。

创建模块的注意事项。

通过GII创建模块时,模块标识通常是小写的。无论如何,这里填写的标识决定了main.php配置文件中的配置。如下所示:

模块'=数组(' admin'=数组(//这一行的admin是模块ID。它与创建模块时填写的模块标识的大小写字母“class”=“application . modules . admin . admin Module”一致。//这里的admin在windows os中是大是小并不重要,最好与实际目录保持一致。),),路由。

表示systemyii框架应用程序的框架目录表示创建的应用程序下的受保护目录(如d:wwwrootblog)。application . modules . Admin . admin module表示应用程序目录下的modules目录下的admin目录中的AdminModules.php文件(例如:d:wwwrootblogprotected)(实际上,它指的是文件的类名)。system.db.*表示YII框架下框架目录下db目录下的所有文件。

控制器中的访问规则描述。

/** *指定访问控制规则。*此方法由“访问控制”过滤器使用。* @return array访问控制规则*/public function access rules(){ return array(array('allow ',//允许所有用户执行' index '和' view ' actions ' actions '=array(' index ',' view '),//表示任何用户都可以访问索引和视图方法' users'=array('* '),//表示任何用户都可以访问),array(' allow ',//允许经过身份验证的用户执行' create '和' update ' actions ' actions '=array(' create ',' update '),//表示只有经过身份验证的用户才能操作创建和更新方法' users'=array('//表示指定的用户,这里的用户:admin),array ('deny ',//deny所有用户' user '=array(' *),);}参见上面的代码注释。

用户:代表用户会话信息。有关详细信息,请参考API:cwebbusercwebuser表示web应用程序的持久状态。CWebUser是一个应用程序组件,它的ID是User。因此,用户状态可以通过Yii:app()-user在任何地方访问。

public function before save(){ if(parent : before save()){ if($ this-isNewRecord){ $ this-password=MD5($ this-password);$ this-create _ user _ id=yii :3360 app()-user-id;//开头写这个,user : model()-user-id;(错误)//$ this-user-id;(错误)$ this-create _ time=date(' y-m-d h : I 3360s ');} else { $ this-update _ user _ id=yii 3360: app()-user-id;$ this-update _ time=date(' Y-m-d h : I :s ');}返回true} else { return false}}getter方法或/和setter方法。

?php/** *用户身份表示识别用户所需的数据。*它包含验证方法,检查提供的*数据是否可以识别用户*/类用户标识扩展CUserIdentity{ /** *对用户进行身份验证。*示例实现确保用户名和密码*都是"演示"。*在实际应用中,应将其更改为针对某些持久用户身份存储(例如数据库)进行身份验证*。* @返回布尔值验证是否成功*/private $ _ id;public function authenticate(){ $ username=strtolow($ this-username);$ user=user : model()-find(' low(username)=?),数组($ username));if($ user===null){ $ this-错误代码=self : error _ USERNAME _ INVALID;} else { //if(!用户:型号()-validatePassword($ this-password))如果(!$ user-validatePassword($ this-PASSWORD)){ $ this-错误码=self :3360 error _ PASSWORD _ INVALID;} else { $ this-_ id=$ user-id;$这个-用户名=$用户-用户名;$ this-错误代码=self : error _ NONE} }返回$ this-错误代码===self : error _ NONE} public function GetID(){ return $ this-_ id;} }模型/用户。服务器端编程语言(Professional Hypertext Preprocessor的缩写)

save()之前的公共函数{ if(parent : before save()){ if($ this-isNewRecord){ $ this-password=MD5($ this-password);$ this-create _ user _ id=yii :3360 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 ');}返回true}否则{返回false}}更多相关:

/*由于组件是邮政最顶级父类,所以添加getUrl方法。如下说明:组件是所有组件类的基类组件。实现了定义、使用属性和事件的协议。属性是通过吸气剂方法或/和作曲者方法定义。访问属性就像访问普通的对象变量。读取或写入属性将调用应相的吸气剂或作曲者方法例如:$ a=$ component-text;//相当于$ a=$ component-getText();$ component-text=' ABC ';//相当于$ component-setText(' ABC ');吸气剂和作曲者方法的格式如下//getter,定义了一个可读的属性text ' public函数getText(){ }.}//setter,定义一个可写属性“文本”,其$值将被设置为公共财产函数setText($ value){ 0.} */public function GetURl(){ return yii : app()-createURl(' post/view ',array('id'=$this-id,' title'=$this-title,);}模型中的规则方法

/* *规则方法:指定对模型属性的验证规则* 模型实例调用生效或救援方法时逐一执行* 验证的必须是用户输入的属性。像id,作者编号等通过代码或数据库设定的不用出现在规则中*//* * * @返回模型属性的数组验证规则*/public function rules(){//note :您应该只为//将接收用户输入的那些属性定义规则。返回数组(数组(“新闻_标题,新闻_内容”,)必选'),数组(' news_title ',' length ',' max'=128),数组(' news_content ',' length ',' max'=8000),数组('作者名称,类型id,状态id,创建时间,更新时间,创建用户id,更新用户id ','安全'),搜索()使用以下规则。//请删除那些不应该搜索的属性。数组(' 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模型。

/* * * @返回模型属性的数组验证规则。*/public function rules(){//note :您应该只为//将接收用户输入的那些属性定义规则。返回数组(数组(' news_title,news_content ','必选'),数组(' news_title ',' length ',' max'=128,' encoding'='utf-8 '),数组(' news_content ',' length ',' max'=8000 ',' encoding'='utf-8 '),数组(' status_id,type_id ',' safe '),search()使用以下规则。//请删除那些不应该搜索的属性。数组(' id,news_title,news_content,author_name,type_id,status_id ',' safe ',' on'='search '),);}在视图中显示动态内容的三种方法。

1、直接在视图文件中用PHP代码。例如,显示当前时间。在视图中,复制代码如下:php回显日期(' Y-m-d h : I :s ');2.在控制器中显示内容,并通过渲染的第二个参数将其传递给视图。

该方法包括:

$ tTiME=date(' Y-m-d h : I :s ');$this-render('helloWorld ',数组(' time '=$ theTime));查看文件:复制代码如下:php echo $ time?调用的render()方法的第二个参数的数据是数组(数组类型)。render()方法将提取数组中的值,并将它们提供给视图脚本。数组中的键值将是提供给视图脚本的变量名。在本例中,数组的键值是时间,值是$theTime,因此视图脚本使用提取的变量名$time。这是一种将控制器数据传输到视图的方法。

3.视图和控制器是非常亲密的兄弟,所以视图文件中的$this指的是呈现这个视图的控制器。修改前面的示例,并在控制器中定义一个类的公共属性,而不是一个局部变量,该变量可以是一个值,也可以是当前的日期和时间。然后在视图中通过$this访问这个类的属性。

视图命名约定

文件名与动作标识相同。但是请记住,这只是一个推荐的命名约定。实际上,视图的文件名不必与ActionID相同,只需将文件名作为第一个参数传递给render()。

数据库相关性

$ Prerfp=Prerfp 3360: model()-findAll(数组(' limit'='5 ',' order '=' release time desc '));$ model=finishrfp : model()-findAll(数组(' select'='companyname,title,releasetime ',' order'='releasetime desc ',' limit '=10));'中的foreach($ model as $ val){ $ noti earr[]='。$val-title。出价。$ val-公司名称。“中标了,”;} $ model=cgnotice :3360 model()-findAll(数组(' select'='status,content,updatetime ',' condition'='status=:status ',' params'=数组(' :status'=0),' order'='updatetime desc ',' limit '=10));foreach($ model as $ val){ $ noticeearr[]=$ val-content;} $ user=user : model()-find(' low(username)=?),数组($ username));$ notice type=dictionary : model()-find(array(' condition '=' ` type `=' notice type ' '));//查找postID=10 $ post=post :3360 model()-find(' postID=: postID ',array(' : postID '=10));您也可以使用$condition来指定更复杂的查询条件。我们可以让$condition成为CDbCriteria的实例,而不是使用字符串,这样我们就可以指定不限于WHERE的条件。例如:

$ criteria=新的CDB criteria $ criteria-select=' title ';//只选择'标题'列$ criteria-condition=' PostID=: PostID ';$ criteria-params=array(' : postid '=10);$ post=post : model()-find($ criteria);//$params不需要了注意,当使用CDbCriteria作为查询条件时,$params参数不再需要了,因为它可以在CDbCriteria中指定,就像上面那样。

一种替代CDbCriteria的方法是给发现方法传递一个数组。数组的键和值各自对应标准(标准)的属性名和值,上面的例子可以重写为如下:

$ post=post : model()-find(数组(' select'='title ',' condition'='postID=:postID ',' params '=数组(' :postID'=10),);其它

1、链接复制代码代码如下:span类?服务器端编程语言(Professional Hypertext Preprocessor的缩写)回显chtml :3360链接(控制器:3360 utf8 _ substr($ val-title,0,26),数组(' prerfp/details ',' id'=$val-rfpid),数组(' target '=' _ blank ');/a /span

具体查找应用程序接口文档:CHtml的链接()方法复制代码代码如下TT?PHP echo $ val-title;href='?PHP echo $ this-CreateURl(' prerfp/details ',数组(' id '=$ val-rfpid));服务器端编程语言(Professional Hypertext Preprocessor的缩写)回声控制器:3360 utf8 _ substr($ val-title,0,26);/a /span具体请查找应用程序接口文档:控制器的createUrl()方法

以上两个连接效果等同

组件包含

一个示例:

在视图中底部有如下代码:复制代码代码如下:PHP $ this-widget(' Notice ');

打开受保护的/组件下的Notice.php文件,内容如下:

?phpyiii :3360 import(' zii。小部件。cportlet’);类旗帜扩展了CPortlet { protected function render content(){ $ this-render(' Banner ');}}渲染的视图横幅,是在受保护的/组件/视图目录下。

具体查看原料药,关键字:CPortlet

获取当前宿主

yii : app()-request-getServerName();//和$ _ SERVER[' HTTP _ HOST '];$ URL=' http://'。yii :3360 app()-request-getServerName();$url .=cccontroller :创建URL('用户/激活电子邮件',数组(' emailActivationKey '=$ activationKey));echo $ url关于在发布新闻时添加ckeditor扩展中遇到的情况

$ this-widget('应用程序。扩展。编辑。ckkceditor ',数组(' model'=$model,# Data-Model ' Attribute '=' news _ content ',# Attribute in Data-Model ' height '=' 300 px ',' width'='80% ',' file path '=yii 3360: app()-基本路径.'/./up/',文件URL '=yii : app()-基本URL ./up/',);echo yii : app()-基本路径

如果项目目录在:d:wwwrootblog目录下。则上面的值为d: wwwroot blog 受保护。注意路径最后没有返斜杠。

echo yii :3360 app()-基础URL

如果项目目录在:d:wwwrootblog目录下。则上面的值为/博客。注意路径最后没有返斜杠。

(d:wwwroot为网站根目录),注意上面两个区别。一个是basePath,一个是baseUrl

其它(不一定正确)

在一个控制器A对应的A视图中,调用B模型中的方法,采用:B:model()-B模型中的方法名();

前期需要掌握的一些APICHtml

希望本文所述对大家基于Yii框架的服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。

更多资讯
游戏推荐
更多+