yii 常用一些调用 (增加中)
调用YII框架中 jquery:Yii::app()->clientScript->registerCoreScript(‘jquery’);
framework/web/js/source的js,其中registerCoreScript key调用的文件在framework/web/js/packages.php列表中可以查看
在view中得到当前controller的ID方法 :Yii::app()->getController()->id;
在view中得到当前action的ID方法 :Yii::app()->getController()->getAction()->id;
yii获取ip地址 :Yii::app()->request->userHostAddress;
yii判断提交方式 :Yii::app()->request->isPostRequest
得到当前域名: Yii::app()->request->hostInfo
得到proteced目录的物理路径 :YII::app()->basePath;
获得上一页的url以返回 :Yii::app()->request->urlReferrer;
得到当前url :Yii::app()->request->url;
得到当前home url :Yii::app()->homeUrl
得到当前return url :Yii::app()->user->returnUrl
项目路径 :dirname(Yii::app()->BasePath)
项目目录 Yii::app()->request->baseUrl 只输出一个连接(url)<?php echo $this->createUrl('admin/left_menu');?> //**.php?r=admin/left_menu
输出一组url(yii url 默认样式)
//除域名外的URL
Yii::app()->request->getUrl();
除域名外的首页地址
Yii::app()->user->returnUrl;
6、//除域名外的根目录地址 Yii::app()->homeUrl;
YII FRAMEWORK的COOKIE使用方法
设置cookie:
[php] view plain copy
$cookie = new CHttpCookie(‘mycookie’,‘this is my cookie’);
c
o
o
k
i
e
−
>
e
x
p
i
r
e
=
t
i
m
e
(
)
+
60
∗
60
∗
24
∗
30
;
/
/
有限期
30
天
Y
i
i
:
:
a
p
p
(
)
−
>
r
e
q
u
e
s
t
−
>
c
o
o
k
i
e
s
[
′
m
y
c
o
o
k
i
e
′
]
=
cookie->expire = time()+60*60*24*30; //有限期30天 Yii::app()->request->cookies['mycookie']=
cookie−>expire=time()+60∗60∗24∗30;//有限期30天Yii::app()−>request−>cookies[′mycookie′]=cookie;
读取cookie:
[html] view plain copy
$cookie = Yii::app()->request->getCookies();
echo $cookie[‘mycookie’]->value;
销毁cookie:
[html] view plain copy
$cookie = Yii::app()->request->getCookies();
unset(cookie[name]);
在控制器添加CSS文件或JAVASCRIPT文件
[php] view plain copy
public function init()
{
parent::init();
Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.‘/css/my.css’);
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.‘/css/my.js’);
}
YII FRAMEWORK的用户验证与授权
yii提供了CUserIdentity类,这个类一般用于验证用户名和密码的类.继承后我们需要重写其中的authenticate()方法来实现我们自己的验证方法.具体代码如下:
[php] view plain copy
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
r
e
c
o
r
d
=
U
s
e
r
:
:
m
o
d
e
l
(
)
−
>
f
i
n
d
B
y
A
t
t
r
i
b
u
t
e
s
(
a
r
r
a
y
(
′
u
s
e
r
n
a
m
e
′
=
>
record=User::model()->findByAttributes(array('username'=>
record=User::model()−>findByAttributes(array(′username′=>this->username));
if($record===null)
t
h
i
s
−
>
e
r
r
o
r
C
o
d
e
=
s
e
l
f
:
:
E
R
R
O
R
U
S
E
R
N
A
M
E
I
N
V
A
L
I
D
;
e
l
s
e
i
f
(
this->errorCode=self::ERROR_USERNAME_INVALID; else if(
this−>errorCode=self::ERRORUSERNAMEINVALID;elseif(record->password!==md5($this->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
t
h
i
s
−
>
i
d
=
this->_id=
this−>id=record->id;
$this->setState(‘title’, $record->title);
KaTeX parse error: Expected 'EOF', got '}' at position 45: …ONE; }̲ retu…this->errorCode;
}
public function getId()
{
return $this->_id;
}
}
在用户登陆时则调用如下代码:
// 使用提供的用户名和密码登录用户
[html] view plain copy
i
d
e
n
t
i
t
y
=
n
e
w
U
s
e
r
I
d
e
n
t
i
t
y
(
u
s
e
r
n
a
m
e
,
p
a
s
s
w
o
r
d
)
;
i
f
(
identity=new UserIdentity(username,password); if(
identity=newUserIdentity(username,password);if(identity->authenticate())
Yii::app()->user->login($identity);
else
echo $identity->errorMessage;
用户退出时,则调用如下代码:
[html] view plain copy
// 注销当前用户
Yii::app()->user->logout();
其中的user是yii的一个components.需要在protected/config/main.php中定义
[html] view plain copy
‘user’=>array(
// enable cookie-based authentication
‘allowAutoLogin’=>true,
‘loginUrl’ => array(‘site/login’),
),
YII FRAMEWORK中TRASACTION事务的应用
[html] view plain copy
$model=Post::model();
t
r
a
n
s
a
c
t
i
o
n
=
transaction=
transaction=model->dbConnection->beginTransaction();
try
{
// find and save are two steps which may be intervened by another request
// we therefore use a transaction to ensure consistency and integrity
p
o
s
t
=
post=
post=model->findByPk(10);
$post->title=‘new post title’;
$post->save();
$transaction->commit();
}
catch(Exception $e)
{
$transaction->rollBack();
}
Yii Framework中截取字符串(UTF-8)的方法
Helper.PHP
[php] view plain copy
class Helper extends CController
{
public static function truncate_utf8_string($string, $length, $etc = ‘…’)
{
$result = ‘’;
s
t
r
i
n
g
=
h
t
m
l
e
n
t
i
t
y
d
e
c
o
d
e
(
t
r
i
m
(
s
t
r
i
p
t
a
g
s
(
string = html_entity_decode(trim(strip_tags(
string=htmlentitydecode(trim(striptags(string)), ENT_QUOTES, ‘UTF-8’);
s
t
r
l
e
n
=
s
t
r
l
e
n
(
strlen = strlen(
strlen=strlen(string);
for (
i
=
0
;
(
(
i = 0; ((
i=0;((i < KaTeX parse error: Expected 'EOF', got '&' at position 9: strlen) &̲& (length > 0)); KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (number = strpos(str_pad(decbin(ord(substr($string, KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (length < 1.0)
{
break;
}
r
e
s
u
l
t
.
=
s
u
b
s
t
r
(
result .= substr(
result.=substr(string, $i, $number);
$length -= 1.0;
$i += $number - 1;
}
else
{
r
e
s
u
l
t
.
=
s
u
b
s
t
r
(
result .= substr(
result.=substr(string, $i, 1);
$length -= 0.5;
}
}
r
e
s
u
l
t
=
h
t
m
l
s
p
e
c
i
a
l
c
h
a
r
s
(
result = htmlspecialchars(
result=htmlspecialchars(result, ENT_QUOTES, ‘UTF-8’);
if ($i < $strlen)
{
$result .= $etc;
}
return $result;
}
}
将Helper.php放进protected\components文件夹下。
使用方法:
Helper::truncate_utf8_string(content,20,false);//不显示省略号Helper::truncateutf8string(content,20); //显示省略号
CBREADCRUMBS简介~俗称:面包屑
功能介绍:zii.widgets 下的CBreadcrumbs类,其继承关系: CBreadcrumbs » CWidget »
CBaseController » CComponent .源代码位置:
framework/zii/widgets/CBreadcrumbs.php
面包屑类显示一个链接列表以表明当前页面在整个网站中的位置.
由于面包屑通常会出现在网站的近乎所有的页面,此插件最好在视图的layout中进行部署.
你可以定义一个breadcrumbs属性并且在布局文件中指派给(网站)基础控制器插件,如下所示:
[html] view plain copy
t
h
i
s
−
>
w
i
d
g
e
t
(
′
z
i
i
.
w
i
d
g
e
t
s
.
C
B
r
e
a
d
c
r
u
m
b
s
′
,
a
r
r
a
y
(
′
l
i
n
k
s
′
=
>
this->widget('zii.widgets.CBreadcrumbs', array( 'links'=>
this−>widget(′zii.widgets.CBreadcrumbs′,array(′links′=>this->breadcrumbs,
));
于是乎,你需要时,只需要在每个视图脚本中,指定breadcrumbs属性(就可以显示出网页导航了).
以上是官方提供的文档文件的介绍.
下面介绍视图文件中写法:
[html] view plain copy
$this->breadcrumbs=array(
‘Users’=>array(‘index’),
‘Create’,
// 形式 : ‘key’ =>‘value’ key的位置相当于最后显示出来的a标签内的名字, value则相当于a标签的href属性.
// 'Create’表示当前页 故没有设置链接.
);
YII FRAMEWORK中验证码的使用
1.在controller中修改:
[html] view plain copy
public function actions()
{
return array(
// captcha action renders the CAPTCHA image displayed on the contact page
‘captcha’=>array(
‘class’=>‘CCaptchaAction’,
‘backColor’=>0xFFFFFF, //背景颜色
‘minLength’=>4, //最短为4位
‘maxLength’=>4, //是长为4位
‘transparent’=>true, //显示为透明
),
);
}
2.在view的form表单中添加如下代码:
[html] view plain copy
<?php if(CCaptcha::checkRequirements()): ?>Letters are not case-sensitive.
YII FRAMEWORK的CHTML::LINK支持锚点
CHtml::link(‘链接文字’,array(‘article/view’,‘id’=>‘3’,‘#’=>‘锚名称’);
CUrlManager的 createUrl,是可以支持 ‘#’ 的!
params = array(‘userid’ => 100, ‘#’ => ‘锚名称’);this->createUrl(route,params);
YII FRAMEWORK在WEB页面查看SQL语句配置
[html] view plain copy
‘components’=>array(
‘errorHandler’=>array(
// use ‘site/error’ action to display errors
‘errorAction’=>‘site/error’,
),
‘log’=>array(
‘class’=>‘CLogRouter’,
‘routes’=>array(
array(
‘class’=>‘CFileLogRoute’,
‘levels’=>‘error, warning’,
),
// 下面显示页面日志
array(
‘class’=>‘CWebLogRoute’,
‘levels’=>‘trace’, //级别为trace
‘categories’=>‘system.db.*’ //只显示关于数据库信息,包括数据库连接,数据库执行语句
),
),
),
),
YII FRAMEWORK打印AR结果
[html] view plain copy
KaTeX parse error: Expected '}', got 'EOF' at end of input: … var_dump(v->attributes);
}
yii 数据save后得到插入id
post−>save();//得到上次插入的Insertidid = $post->attributes[‘id’];
如此很简单
yii获取ip地址
Yii::app()->request->userHostAddress;
yii execute后获取insert id
$id = Yii::app()->db->getLastInsertID();
yii获取get,post过来的数据
Yii::app()->request->getParam(‘id’);
yii如何设置时区
可以在config/main.php 里’timeZone’=>‘Asia/Chongqing’,设定时区.
yii如何将表单验证提示弄成中文的
将main.php里的app配置加上language=>‘zh_cn’,系统默认的提示就是中文的了,要自定义消息就像楼上说的定义message
yii如何获得上一页的url以返回
Yii::app()->request->urlReferrer;
yii多对多关联条件
[html] view plain copy
c
r
i
t
e
r
i
a
−
>
a
d
d
I
n
C
o
n
d
i
t
i
o
n
(
′
c
a
t
e
g
o
r
y
s
.
i
d
′
,
criteria->addInCondition('categorys.id',
criteria−>addInCondition(′categorys.id′,in);
c
r
i
t
e
r
i
a
−
>
a
d
d
S
e
a
r
c
h
C
o
n
d
i
t
i
o
n
(
′
S
h
o
p
.
n
a
m
e
′
,
k
e
y
w
o
r
d
)
;
s
h
o
p
s
=
S
h
o
p
:
:
m
o
d
e
l
(
)
−
>
w
i
t
h
(
a
r
r
a
y
(
′
c
a
t
e
g
o
r
y
s
′
=
>
a
r
r
a
y
(
′
t
o
g
e
t
h
e
r
′
=
>
t
r
u
e
)
)
)
−
>
f
i
n
d
A
l
l
(
criteria->addSearchCondition('Shop.name',keyword);shops=Shop::model()->with(array('categorys'=>array('together'=>true)))->findAll(
criteria−>addSearchCondition(′Shop.name′,keyword);shops=Shop::model()−>with(array(′categorys′=>array(′together′=>true)))−>findAll(criteria);
同时要在Shop模型中加入alias=‘categorys’ ,另外together=true放在模型的关联中也可
yii如何防止重复提交?
提交后Ccontroler->refresh();
yii过滤不良代码
[html] view plain copy
$purifier=new CHtmlPurifier;
$purifier->options=array(‘HTML.Allowed’=>‘div’);
c
o
n
t
e
n
t
=
content=
content=purifier->purify($content);
或者
[html] view plain copy
…display user-entered content here…
<?php $this->endWidget(); ?>显示yii的sql语句查询条数和时间
在config/main.php中配置在log组件的routes中加入
[html] view plain copy
array(
‘class’=>‘CProfileLogRoute’,
‘levels’=>‘error, warning’,
)
同时在db组件中加入’enableProfiling’=>true,同时在这种情况下,可以用CDbConnection::getStats() 查看执行了多少个语句,用了多少时间print_r(CDbConnection::getStats());
Yii多数据库操作
大多数情况下,我们都会采用同一类型的数据库,只是为了缓解压力分成主从或分布式形式而已。声明你可以在app config里声明其它的数据库连接: