首页 > 编程 > PHP > 正文

YiiFramework的入门知识点总结

2020-03-22 18:39:11
字体:
来源:转载
供稿:网友
这篇文章主要介绍了YiiFramework入门知识点,结合图文形式总结分析了YiiFramework创建的具体步骤及使用的相关注意事项,需要的朋友可以参考下

本文总结了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大写写一致 html' target='_blank'>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 rulespublic 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- //一开始这样写,User::model()- user- (错误) //$this- user- (错误) $this- create_time=date( Y-m-d H:i:s  else $this- update_user_id=Yii::app()- user-  $this- update_time=date( Y-m-d H:i:s  return true; else return false;}

getter方法或/和setter方法

 ?php * UserIdentity represents the data needed to identity a user. * It contains the authentication method that checks if the provided * data can identity the user.class UserIdentity extends CUserIdentity * Authenticates a user. * The example implementation makes sure if the username and password * are both demo . * In practical applications, this should be changed to authenticate * against some persistent user identity storage (e.g. database). * @return boolean whether authentication succeeds. private $_id; public function authenticate() $username=strtolower($this- username); $user=User::model()- find( LOWER(username)=? ,array($username)); if($user===null) $this- errorCode=self::ERROR_USERNAME_INVALID; else //if(!User::model()- validatePassword($this- password)) if(!$user- validatePassword($this- password)) $this- errorCode=self::ERROR_PASSWORD_INVALID; else $this- _id=$user-  $this- username=$user- username; $this- errorCode=self::ERROR_NONE; return $this- errorCode===self::ERROR_NONE; public function getId() return $this- }

model/User.php

public function beforeSave() if(parent::beforeSave()) if($this- isNewRecord) $this- password=md5($this- password); $this- create_user_id=Yii::app()- user- //====主要为此句。得到登陆帐号的ID $this- create_time=date( Y-m-d H:i:s  else $this- update_user_id=Yii::app()- user-  $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 propertypublic 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代码实现。比如显示当前时间,在视图中:

 ?php echo date( Y-m-d H:i:s ? 

2、在控制器中实现显示内容,通过render的第二个参数传给视图

控制器方法中包含:

$theTime=date( Y-m-d H:i:s $this- render( helloWorld ,array( time = $theTime));

视图文件:

 ?php echo $time;? 

调用的render()方法第二个参数的数据是一个array(数组类型),render()方法会提取数组中的值提供给视图脚本,数组中的 key(键值)将是提供给视图脚本的变量名。在这个例子中,数组的key(键值)是time,value(值)是$theTime则提取出的变量名$time是供视图脚本使用的。这是将控制器的数据传递给视图的一种方法。

3、视图与控制器是非常紧密的兄弟,所以视图文件中的$this指的就是渲染这个视图的控制器。修改前面的示例,在控制器中定义一个类的公共属性,而不是局部变量,它是值就是当前的日期和时间。然后在视图中通过$this访问这个类的属性。

视图命名约定

视图文件命名,请与ActionID相同。但请记住,这只是个推荐的命名约定。其实视图文件名不必与ActionID相同,只需要将文件的名字作为第一个参数传递给render()就可以了。

DB相关

$Prerfp = Prerfp::model()- findAll( array( limit = 5 , order = releasetime desc );
$model = Finishrfp::model()- findAll( array( select = companyname,title,releasetime , order = releasetime desc , limit = 10foreach($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 = 10foreach($model as $val){ $noticeArr[] = $val- content;}
$user=User::model()- find( LOWER(username)=? ,array($username));
$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 = $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 >

具体查找API文档:CHtml的link()方法

 span >

具体请查找API文档:CController的createUrl()方法

以上两个连接效果等同

组件包含

一个示例:

在视图中底部有如下代码:

 ?php $this- widget ( Notice ? 

打开protected/components下的Notice.php文件,内容如下:

 ?phpYii::import( zii.widgets.CPortlet class Banner extends CPortlet protected function renderContent() $this- render( banner }

渲染的视图banner,是在protected/components/views目录下。

具体查看API,关键字: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

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP !

相关推荐:

关于Yii Framework框架获取分类下面的所有子类的方法

以上就是YiiFramework的入门知识点总结的详细内容,PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表