来源:未知 时间:2015-12-30 10:04 作者:xxadmin 阅读:次
[导读] 本文总结了YiiFramework入门知识点。分享给大家供大家参考,具体如下: 创建Yii应用骨架 web为网站根目录 yiic webapp /web/demo 通过GII创建model和CURD时需要注意 1、Model Generator 操作 即使在有...
|
本文总结了YiiFramework入门知识点。分享给大家供大家参考,具体如下: 创建Yii应用骨架 web为网站根目录 通过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目录 控制器中的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 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方法 <?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->id;
$this->username=$user->username;
$this->errorCode=self::ERROR_NONE;
}
}
return $this->errorCode===self::ERROR_NONE;
}
public function getId()
{
return $this->_id;
}
}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;//====主要为此句。得到登陆帐号的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、验证字段必须为用户输入的属性。不是由用户输入的内容,无需验证。 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");?>
控制器方法中包含: $theTime=date("Y-m-d H:i:s");
$this->render('helloWorld',array('time'=>$theTime));视图文件: 复制代码 代码如下: <?php echo $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' => 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)=?',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'=>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"><?php echo CHtml::link(Controller::utf8_substr($val->title,0,26),array('prerfp/details','id'=>$val->rfpid),array('target'=>'_blank'));?></a> </span> 具体查找API文档:CHtml的link()方法 复制代码 代码如下: <span class="tt"><a target="_blank" title="<?php echo $val->title;?>" href="<?php echo $this->createUrl('prerfp/details',array('id'=>$val->rfpid)) ;?>" ><?php echo Controller::utf8_substr($val->title,0,26); ?></a> </span>
以上两个连接效果等同 组件包含 一个示例: 在视图中底部有如下代码: 复制代码 代码如下: <?php $this->widget ( 'Notice' ); ?>
打开protected/components下的Notice.php文件,内容如下: <?php
Yii::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 希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com