3.问答:
Yii 框架里 Yii::app()->request->getParam();这种方法获取到的get 、 post参数有没有过滤不安全字符的功能?
(安全机制在model中rules中)
二.手脚架(gii操作)自己了解(创建modules文件夹小模块部分包含在里面)
1.
(user为自定义模块user模块中的小模型)class user extends base——>>class Base extends CActiveRecord ———>>class Active Record extends CModel
虽然这种直接嵌入PHP代码的做法根本不允许复杂的代码,但Yii强烈建议这些语句不改变数据模型,让他们保持简单明了。这将有助于使我们的业务逻辑与视图分离,这是MVC架构的一部份。
将数据移到控制器
让我们将创建时间的代码放到控制器中,视图只显示这个时间。我们将代码放到控制器的actionHelloWorld()方法中,设置一个变量$theTime保存时间。
- 首先,让我们改变控制器的操作方法。当前,我们在MessageController控制中的actionHelloWorld()中编下如下代码:
$this->render('helloWorld');
在render()方法这前,我们添加一段调用时间代码,将时间存入局域变量$theTime。然后我们添加render()方法的第二个参数,将$theTime这个变量传给redner()方法:$theTime=date("D M j G:i:s T Y"); $this->render('helloWorld',array('time'=>$theTime));
调用的render()方法第二个参数的数据是一个array(数组类型),render()方法会提取数组中的值提供给视图脚本,数组中的 key(键值)将是提供给视图脚本的变量名。在这个例子中,数组的key(键值)是time,value(值)是$theTime则提取出的变量名$time是供视图脚本使用的。这是将控制器的数据传递给视图的一种方法。 - 现在让我们在视图中使用这个变量而不使用date(日期函数)。再次打开helloWorld视图,替换之前添加过的时间代码为:
<h3><?php echo $time; ?></h3>
视图与控制器是非常紧密的兄弟,所以视图文件中的$this指的就是渲染这个视图的控制器。
六。访问权限(此处参考代码寻找控制器中accessRules方法)
当用户第一次访问,必须进登录验证才能访问其他功能。一旦登录成功,用户将看到一个与他相关的项目列表和一个创建新项目按钮,选定一个项目,将转到这个项目的详细信息页面。该项目的详细页面将显示各种类型问题的列表,并且也有添加新问题和编辑其他问题的按钮
九。增删改查(1)create
Usercontroller()控制器中
public function actionRegister()
{
$model=new User ;
$model->id="11";
$model->username ='lukun';
$model->password='123';
$model->save();
// 赋值方法
// $model->username= $username;
$a= "用户注册界面";
$theTime =date("Y-m-d H:i:s");
$this->render('register',array(
'a'=>$a,
'time'=>$theTime,
'model'=> $model
));
}
register.php视图中
<?php echo $a;?><br/>
<?php echo $time;?><br/>
用户编号:<?php echo $model->id;?>
用户账号:<?php echo $model->username;?>
密码:<?php echo $model->password;?>
<?php echo CHtml::link('登录',array('user/login')) ;?><br/>
<?php echo CHtml::link('再见',array('user/goodbye')) ;?>
页面效果:
用户注册界面
2013-06-08 13:43:08
用户编号:11用户账号:lukun密码:123登录
再见
(2)read()
查询数据
(3)update()
更新数据
(4)delete()
删除数据
十.视图中进行 CHtml()
register.php视图中
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'user-form',
'method'=>'POST',//默认是POST,可以使用GET
'enableAjaxValidation'=>false,
)); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<font color='red'><b><?php echo $form->labelEx($model,'账号'); ?></b></font>
<?php echo $form->textField($model,'username',array('size'=>26,'maxlength'=>128)); ?>
<?php echo $form->error($model,'username'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? '创建' : 'Save'); ?>
<?php echo CHtml::resetButton($model->isNewRecord ?'重置':'Reset');?>
</div>
<?php $this->endWidget(); ?>
进行以上代码操作的前提是模型必须实例化
Usercontroller()控制器中:
public function actionRegister()
{
$model= new user;
$a= "用户注册界面";
$theTime =date("Y-m-d H:i:s");
$this->render('register',array(
'model'=> $model,
));
}
十一.在页面中显示的就是常见的表单
在使用Yii做为图片服务器的时候,经常需要处理绝对路径。
首先就要知道网站的根目录是什么。
有下面3个方法:
1、在index.php文件中使用dirname(__FILE__),并保存
2、使用Yii::app()->basePath, 这个指向的是protected目录,再回退一级目录即可:Yii::app()->
basePath.'/../'
3、使用Yii::getPathOfAlias('webroot').'/'
十二.render是调用layout渲染一个view,并显示出来。renderPrtial直接显示一个view。renderText是显示一个静态的string字符串
十三. yii关于session和cookie的问题
(1)首先,在Yii框架中,你不需要像标准PHP代码那样使用session_start(),
虽然没有使用session_start(),你仍然可以使用$_SESSION全局变量,但最好使用
Yii框架封装的 Yii::app->session:
设置session变量:
Yii::app()->session['id'] = $user_info['id'];
Yii::app()->session['nickname'] = $user_info['nickname'];
Yii::app()->session['groupid'] = $user_info['groupid'];
Yii::app()->session['jidi_id'] = $user_info['jidi_id'];
使用: echo Yii::app()->session['id'];
移除: unset(Yii::app()->session['id']);
最后,当用户退出登录(logout),你需要消除痕迹,可使用:
Yii::app()->session->clear() 移去所有session变量,然后,调用
Yii::app()->session->destroy() 移去存储在服务器端的数据。
(2)设置cookie:
//首先新建cookie
$cookie = new CHttpCookie(‘mycookie’, ‘this is my cookie’);
//定义cookie的有效期
$cookie->expire = time()+60*60*24*30; //有限期30天
//把cookie写入cookies使其生效
Yii::app()->request->cookies['mycookie']=$cookie;
注意:CHttpCookie定义的cookie名”mycookie”与Yii::app()->request->cookies['mycookie']中的”mycookie”必须一致,即每次添加cookie值都要写两次cookie名
读取cookie:
$cookie = Yii::app()->request->getCookies();
echo $cookie['mycookie']->value;
销毁cookie:
$cookie = Yii::app()->request->getCookies();
unset($cookie[$name]);
(3)设置session变量:
Yii::app()->session['var']=’value’;
使用: echo Yii::app()->session['var'];
移除: unset(Yii::app()->session['var']);
更为复杂一点的使用时如何配置你的session
配置项可设在 protected/config/main.php的components中:
‘session’=>array(
‘autoStart’=>false(/true),
‘sessionName’=>’Site Access’,
‘cookieMode’=>’only’,
‘savePath’='/path/to/new/directory’,
),