系统后台:用户登录、后台首页面、商品列表、添加商品、修改商品
后天的一些页面在用户没有登录系统的时候是不允许访问的,例如 商品列表、添加商品、修改商品
有一些页面无论用户是否登录系统,都是可以访问的,例如 用户登录
后台代码:
<?php /** * 后台商品管理控制器 */ class GoodsController extends Controller { /* * 在当前控制器实现用户访问的控制 */ function filters() { return array( 'accessControl', ); } /* * show add update del 等方法在进行访问的时候需要用户登录系统 * 为具体方法被访问设置条件 */ function accessRules() { return array( //用户访问控制扩展 //add 方法可以被无条件访问(无论登录与否都可以访问) array( 'allow', 'actions'=>array('add'), 'users'=>array('*'), //什么用可以访问 ), //具体指定"用户"可以删除信息 //linken zhangsan lisi 这个三个用户都可以进行删除操作 array( 'allow', 'actions'=>array('del'), 'users' => array('linken','zhangsan','lisi'), ), //匿名用户操作 ? //有的控制器是匿名用户可以访问,已经登录系统用户是禁止访问的 //update 这个方法是匿名用户可以访问 array( 'allow', 'actions'=>array('update'), 'users'=>array('?'), ), //show 必须是登录系统的用户来访问 array( 'allow', 'actions'=>array('show'), 'users'=>array('@'), ), array( 'deny', 'users'=>array('*'), ), ); } /* * 商品展示 */ function actionShow(){ //通过模型model实现数据表信息查询 //产生模型model对象 $goods_model = Goods::model(); //通过model模型对象调用相关方法帮我们查询数据 //$goods_infos = $goods_model -> find(); //每次只可以查询一条商品信息 //echo $goods_infos->goods_name,"<br />"; //echo $goods_infos->goods_price,"<br />"; //获得全部商品信息findAll() $goods_infos = $goods_model -> findAll(); //获得全部商品名字的信息 //foreach($goods_infos as $_v){ //$_v就是遍历出来的具体对象 // echo $_v->goods_name,"----",$_v->goods_price,"<br />"; //} //通过具体sql语句获得商品信息findAllBySql() //$sql = "select goods_id,goods_name,goods_price,goods_create_time from {{goods}} limit 10"; //$goods_infos = $goods_model ->findAllBySql($sql); //var_dump($goods_infos); //把获得数据信息传递到视图模板里边 //renderPartial('视图名字',传递的变量信息); //renderPartial('show',array('名字'=>值,'名字'=>值)); //名字:是视图使用的变量名字 //值:当前被传递变量的值 $this ->renderPartial('show',array('goods_infos'=>$goods_infos)); } /* * 建立一个测试方法,实现商品数据分页显示 */ function actionShow1(){ //获得数据模型 $goods_model = Goods::model(); //1.获得商品总的记录数目 $cnt = $goods_model -> count(); $per = 6; //2. 实例化分页类对象 $page = new Pagination($cnt, $per); //3. 重新按照分页的样式拼装sql语句进行查询 $sql = "select * from {{goods}} $page->limit"; $goods_infos = $goods_model -> findAllBySql($sql); //4. 获得分页页面列表(需要传递到视图模板里边显示) $page_list = $page->fpage(array(3,4,5,6,7)); //调用视图模板,给模板传递数据 $this ->renderPartial('show',array('goods_infos'=>$goods_infos,'page_list'=>$page_list)); } /* * 添加商品 */ function actionAdd(){ $goods_model = new Goods(); //echo "<pre>"; //print_r($_POST); //echo "</pre>"; //判断表单是否有提交过来数据 //$_POST['Goods']其中Goods有个好处,可以在当前控制器接收多个表单信息,只要下标有区分就可以 if(isset($_POST['Goods'])){ //我们要把从表单提交过来的数据赋予$goods_model模型里边 //$goods_model -> goods_name = $_POST['Goods']['goods_name']; //$goods_model -> goods_price = $_POST['Goods']['goods_price']; //$goods_model -> goods_number = $_POST['Goods']['goods_number']; //$goods_model -> goods_category_id = $_POST['Goods']['goods_category_id']; //$goods_model -> goods_brand_id = $_POST['Goods']['goods_brand_id']; //$goods_model -> goods_introduce = $_POST['Goods']['goods_introduce']; //$goods_model -> goods_weight = $_POST['Goods']['goods_weight']; Yii::beginProfile('addgoods'); //上边代码优化,利用foreach遍历来优化 foreach($_POST['Goods'] as $_k => $_v){ $goods_model -> $_k = $_v; } $goods_model -> goods_create_time = time(); //调用save()方法实现数据添加 if($goods_model -> save()) { //设置添加商品成功提示信息 Yii::app()->user->setFlash('success','添加商品成功'); //信息添加成功后实现页面重定向(商品列表页面) //$this -> redirect('./index.php?r=houtai/goods/show'); } Yii::endProfile('addgoods'); } $this ->renderPartial('add',array('goods_model'=>$goods_model),false,true); } /* * 修改商品 * 当前这个方法在执行的时候需要get方式传递id信息 * 如果没有id信息则此方法是不允许访问的 */ function actionUpdate($id){ //我们具体修改哪个商品,需要将其信息查询出来 //我们需要知道哪个商品被修改,把商品的id信息通过get方式传递过来 //接收被修改商品id信息 //根据$id查询被修改商品信息 $goods_model = Goods::model(); //除了添加(new Goods)数据我们都使用Goods::model()来实例化模型对象 $goods_info = $goods_model -> findByPk($id); //修改逻辑与添加逻辑基本一致,创建表单、收集数据、赋予模型、调用save方法 //修改的时候,数据也是赋予数据模型对象里边了 //$goods_info数据模型里边有一些旧的信息,新的信息覆盖旧的信息 if(isset($_POST['Goods'])){ foreach($_POST['Goods'] as $_k => $_v){ $goods_info -> $_k = $_v; } if($goods_info -> save()) $this -> redirect('./index.php?r=houtai/goods/show'); } //创建数据模型model对象 //new Goods() ; 调用save方法的时候给我们执行insert语句 //Goods::model(); 调用save方法的时候执行update语句 //$goods_info是我们查询出来的被修改商品的信息,同时也是数据模型对象 //把$goods_info传递到视图模板里边。 $this ->renderPartial('update', array('goods_model'=>$goods_info)); } /* * 删除商品信息 * 删除商品信息与修改类似,通过get方式传递被删除商品信息id */ function actionDel($id){ echo $id,"has deleted";exit; //根据$id将被删除商品的数据模型对象获得到,通过该对象调用 delete 方法即可删除数据 $goods_model = Goods::model(); //获得数据模型对象 $goods_info = $goods_model -> findByPk($id); //获得被删除商品的模型对象 //是谁($goods_info还是$goods_model)调用delete if($goods_info->delete()) $this -> redirect('./index.php?r=houtai/goods/show'); } }
当用户没有登录时,默认跳转到登录页面,这个默认登录页面在哪里进行设置?
在main配置文件里面:
注意:
有的控制器方法被禁止访问(即使登录用户也如此),如果被访问,那么首先会询问用户是否是登录,如果用户已经登录系统,那么直接是403禁止访问。
定义用户权限:
l * 全部用户(无论登录与否)
l ? 匿名用户
l 用户名,具体用户
l @ 登录系统用户
用户访问控制两个符号:+ -
+ 表示过滤器专门是针对哪个方法起作用
- 表示除了此方法,其他方法都会进行过滤
<?php class DefaultController extends Controller { /* * 用户访问控制过滤可以针对具体方法起作用 */ function filters() { return array( //+ 表示过滤器只针对具体方法起作用 //'accessControl + f1,f2', //- 表示除了此方法,其他方法都会起作用 //过滤器除了f1方法外,其他的都会起作用 'accessControl - f1', ); } function accessRules() { return array( array( 'deny', 'users'=>array('*'), ), ); } public function actionIndex() { $this->render('index'); } public function actionF1(){ echo "I am F1"; } public function actionF2(){ echo "I am F2"; } public function actionF3(){ echo "I am F3"; } }
时间: 2024-12-12 16:27:03