yii的一点一滴

findAll()、findByPk() 、find()的用法及区别


一、如何引入css、js 文件

<?php echo Yii::app()->basePath;?>  页面效果:  D:\www\test.com\www\yii1\protected

<?php echo Yii::app()->baseurl;?> 页面输出效果:  /yii1

<?php echo Yii::app()->homeurl;?>页面输出效果: /yii1/index.php

<code><?php echo __FILE__; ?></code> 页面输出效果(显示的是当前视图位置): F:\web\apache\htdocs\Test\yii\demo2\protected\views\site\login.php

以上是在视图中处理:

1.  在控制层,可以在ActionIndex中引入,而且还可以引入别的module文件夹中的js/css文件。甚至是任意文件夹下的js/css文件 

Php代码:
public function actionRegister()
{
//引入外部js文件 
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/js/jquery.js');
$model= new user;
$a= "用户注册界面";
$theTime =date("Y-m-d H:i:s");
$this->render('register',array(
'a'=>$a,
'time'=>$theTime,
'model'=> $model
));
}

2.如果是在视图层(../views/..)添加CSS文件或JavaScript文件 

php代码:

<script type="text/javascript" src="<?php echo Yii::app()->baseUrl.'/js/jquery.js';?>"></script>


3.问答:
Yii 框架里 Yii::app()->request->getParam();这种方法获取到的get 、 post参数有没有过滤不安全字符的功能?
(安全机制在model中rules中)
二.手脚架(gii操作)自己了解(创建modules文件夹小模块部分包含在里面)
例子
1.数据库中有一张user表,需要创建的模块名字是admin(即生成admin模块(admin文件夹))
2.点击 Module Generator 生成admin模块
3.点击 Model Generator 生成User模型 位置在: protected/models/User.php
4.点击 Crud Generator 在第二个表单Controller ID 中填写admin/user (此时查看目录文件,在modules中admin模块中的控制器文件夹下生成一个Usercontroller.php文件) 
AR模式:
模型的继承流向
1.
(user为自定义模块user模块中的小模型)class user extends base——>>class Base extends CActiveRecord ———>>class Active Record extends CModel
三. Yii::app();
Yii::app()返回的是你在index.php里创建的CWebApplication实例。在一次请求处理过程中,这是个唯一的实例。Yii::app()主要负责一些全局性的功能模块,比如Yii::app()->getUser()返回的是CWebUser实例(用于表达当前用户的验证信息)。因为CWebApplication继承CComponent,所以Yii::app()->getUser()也可以写作Yii::app()->user (参见关于CComponent的说明,这是Yii的基石)。其它的如returnUrl, homeUrl之类的也都是这种通过getter函数定义的部件属性。另外,你在index.php使用的配置文件,其实质就是对Yii::app()进行属性的初始化。配置文件里提供的就是属性名和属性值的一个列表。任何CWebApplication的公共成员或通过setter定义的属性都可以配置。注意有的属性配置可能比较复杂,例如’components’属性。这时可以参见对应的API信息寻求帮助(例如’components’对应的API就是setComponents())
四:开发阶段
开启index.php文件里面的
defined('YII_DEBUG') or define('YII_DEBUG', TRUE); 不然出现错误都会报出500错误,不容易找错
五.顿悟
一个更好的添加日期和时间的方法

虽然这种直接嵌入PHP代码的做法根本不允许复杂的代码,但Yii强烈建议这些语句不改变数据模型,让他们保持简单明了。这将有助于使我们的业务逻辑与视图分离,这是MVC架构的一部份。

将数据移到控制器

让我们将创建时间的代码放到控制器中,视图只显示这个时间。我们将代码放到控制器的actionHelloWorld()方法中,设置一个变量$theTime保存时间。

  1. 首先,让我们改变控制器的操作方法。当前,我们在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是供视图脚本使用的。这是将控制器的数据传递给视图的一种方法。
  2. 现在让我们在视图中使用这个变量而不使用date(日期函数)。再次打开helloWorld视图,替换之前添加过的时间代码为:
    <h3><?php echo $time; ?></h3>
    视图与控制器是非常紧密的兄弟,所以视图文件中的$this指的就是渲染这个视图的控制器。 
六。访问权限(此处参考代码寻找控制器中accessRules方法
(页面遇到 ”您未被授权执行这个动作“ error403错误时)
在控制里面加上一个action 方法之后,需要修改一下控制器里面的accessRules(访问规则方法)
比如创建:
public function actionGoodbye()  {  $this->render('goodbye');  }
创建完成这个方法之后还需要找到
public function accessRules(){
//如果允许任何人访问添加
array('allow',  "actions"=>array("Goodbye"),  'users' => array('*'),//允许任何人访问  ), 
}
七。页面链接
Yii提供了许多HTML助手,可在视图模板中使用。这些HTML助手都是以静态类的方式存在的
l连接到的是同一个地方,比较两者的不同:
<!-- 链接页面 -->
<a href= "index.php?r=admin/user/create">创建</a>
<!--使用yii的CHtml  -->
<!--此处user为控制器-->
<p><?php echo CHtml::link("创建",array('user/create')); ?></p> 
八。TrackStar应用程序
我们将介绍一个项目任务跟踪系统,给它取了个名字叫TrackStar
http://www.yiibook.com/book/agile_web_application_development_with_yii1.1_and_php5/chapter-3

当用户第一次访问,必须进登录验证才能访问其他功能。一旦登录成功,用户将看到一个与他相关的项目列表和一个创建新项目按钮,选定一个项目,将转到这个项目的详细信息页面。该项目的详细页面将显示各种类型问题的列表,并且也有添加新问题和编辑其他问题的按钮

九。增删改查(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’, ),




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值