Yii框架学习(二)–some tips

1.对于资源(如css或者img)我们可以对路径定义为常量:
在config中建立一个constants.php文件,写上如
define(‘SITE_URL’,'http://localhost/yiishop/’);
define(‘CSS_URL’,SITE_URL.”assets/default/css/”);

之后在入口文件index.php中引入,如
$css=dirname(__FILE__).’/protected/config/constants.php’;
require_once ($css);
这样在引用资源的时候就可以用<?php echo ‘CSS_URL’?>来代替。

2.自定义布局:
在views/layout中新建一个new.php布局文件,可以在里面使用如下形式来创建布局:
<div>这是头部</div>

<div id=”content”>
<?php echo $content; ?> //这里是内容主体
</div>

<div>这是尾部</div>
这样我们就可以在controller中的action方法里面使用render(yourIndexPage)函数来渲染上述布局文件和yourIndexPage页面文件,这样我们的网站就有了公共的头部和尾部。(

另外,renderPartial(yourIndexPage)则是不加布局文件的渲染,控制器集成有默认的布局文件,我们可以重写或者更改componenets/Controller.php中的默认布局文件)。
3.gii创建后台模块:
例如我们用gii创建了后台模块houtai,则站点文件夹下出现一个子文件夹modules,我们需要在配置文件main.php中引入该模块。
之后我们如果要访问模块的话,则需使用?r=模块名/控制器名/方法名,而不同于访问控制器的?r=控制器名/方法名。

4.手动创建数据模型及其操作:
我们在model文件夹下新建一个model,例如userLogin,这个model对应数据库中的user表,并且继承自CActiveRecord,该类包含了很多的方法,比如find()函数
返回数据表中的一个对象(findall()函数返回数据表中所有对象的数组),其中我们必须定义一个静态方法和一个普通方法,如下:
/*
* 返回当前模型对象的静态方法
*/
public static function model($className=__CLASS__){
return parent::model($className);
}
/*
* 返回表名
*/
public function tableName(){
return ‘user’;
}
当然,我们还可以在该model中加入我们自定义的方法,以供控制器使用。

5.在控制器中创建模型对象:
例如我们创建了一个user数据表(有user_id,user_name,category,isanswer属性)并且建立了相应的model,此模型有父类的findall()方法,我们在控制器中建立该模型的一个对象:

$userlist_model = User::model(); //创建用户模型对象,以调用该模型的方法,或者使用$userlist_model = new User();
$user_info = $userlist_model->findall(); //find()每次查询一条信息,findall()查询所有

之后我们可以用foreach ($user_info as $key => $value)来循环遍历对象数组的信息。
当然,我们也可以通过具体的sql语句来获取数据信息,例如:
$sql = “select user_id,user_name,category,isanswered from user”;
$user_info = $userlist_model->findAllBySql($sql);

6.将model中的数据传入视图中:

//$this->rendPartial(‘视图名字’,'传递的变量信息’);
//$this->rendPartial(‘login’,array(‘名字’=>值,’名字’,值));
//名字为视图使用的名字,值为传递的变量的值
$this->renderPartial(‘login’,array(‘user_info’=>$user_info));
7.通过model向数据库中添加信息:
为了操作数据库,我们需要创建模型对象,然后对象调用相关操作来操作数据,对象的属性就可以看做数据表中的字段,这样我们设置好对象的模型就可以实现数据的
添加。例如添加用户:首先我们在userLogin控制器中加入add()方法用以添加一行数据:
public function actionadd(){
$addUser_model=new User();
$addUser_model -> user_id = 2011300000;
$addUser_model -> user_name = “张三”;
$addUser_model -> category = 1;
$addUser_model -> isanswered = 0;
if($addUser_model ->save())
echo “succeed!”;
else
echo “failed!”;

}
这样我们访问该控制器的方法:localhost/jiwei/index?r=user/add,页面就会显示succeed,而且数据库中也加入了新的一行。

8.举例说明如何生成注册表单:
在userController.php中我定义了一个注册用户的操作:

public function actionregister(){
//添加用户
$register_model = new User();
$this -> renderPartial(‘registerForm’,array(‘register_model’=>$register_model));
}

之后在视图文件中添加表单,如下:

<?php $form = $this -> beginWidget(‘CActiveForm’); ?> //这里的$this是指actionregister中创建的user类型的model,

//这里是你的表单域

<?php $this -> endwidget(); ?>

之后可以使用<?php echo $form -> labelEx($register_model,’user_id’) ?> 来以$register_model模型作为前缀生成一个label,页面显示值为user_id;
也可以使用<?php echo $form -> textField($register_model,’user_id’) ?> 来以$register_model模型作为前缀生成一个文本输入框,其name为该模型
中的属性user_id,当然除此之外还可以生成文字域等其他的域。另外,我们一般会给数据模型一个方法以提供汉字名字统一显示,如:
public function attributeLabels(){
return array(
‘user_id’ => ‘学号’,
‘user_name’ => ‘姓名’,
‘category’ => ‘类别’,
‘isanswer’ => ‘是否答题’,
);
}
也就是说,流程大致为:控制器传递模型–>视图创建表单–>创建统一名字显示。

9.登录表单验证:

Yii里面自带了一个数据模型LoginForm,我们可以在控制器的login方法中新建LoginForm模型对象,里面设定好要验证的属性等(例如用户名和密码),然后调用视图传送数据模型。

之后我们在视图中利用上面说的Widget来生成一个视图,例如里面包含一个table,分别有用户名和密码输入行和一个提交按钮。这时候我们查看页面元素会发现这两个输入框的name是LoginForm数组中的值,例如LoginForm[username]、LoginForm[password],这样我们可以在控制器中利用
$user_login -> attribute = $_POST['LoginForm'] 来取得用户输入的值以待检验。

(上次提到了save()方法可以一边校验数据,校验成功可以存储;该方法后面会执行模型的方法rules(),这样就校验了表单。)为了实现登陆校验,可以调用validate(),该方法校验我们的输入(也会执行rules()方法)。也就是说save()、validate()、save()方法是有联系的,即save()会执行validate(),validate()会执行rules().之后我们需要校验数据是否在数据库中存在,在LoginForm模型中自定义一个方法authenticate()来校验真实性,该方法通过UserIdentify类来校验。

if(isset($_POST['LoginForm'])){
//收集表单信息
$user_login -> attributes = $_POST['LoginForm'];
//校验信息,执行rules()方法
if($user_login -> validate()){
echo ‘login succees!’;
}
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值