`
hudeyong926
  • 浏览: 2018457 次
  • 来自: 武汉
社区版块
存档分类
最新评论

YII 通用CURD外部Action 适合单表

阅读更多

用YII创建表的时候出现没主键的表,你可以在AR primaryKey()函数里手工声明主键

主键:CActiveRecord::model($modelClass)->tableSchema->primaryKey;
库名:CActiveRecord::model($modelClass)->tableSchema->schemaName;
表名:CActiveRecord::model($modelClass)->tableSchema->name;

保存后得到主键值

Yii::app()->db->getLastInsertID();
$model->save();
$model->id; 

为什么用外部Action,可以提高业务的重用性 。如DeleteAction可以同时处理post,user,...删除。

制器通常有一个默认的动作。当用户的请求未指定要执行的动作时,默认动作将被执行。默认情况下,默认的动作名为index, 它可以通过设置 CController::defaultAction 修改。

public $defaultAction='index';

 

1.创建DeleteAction.php在protected/actions目录下,用于删除一条记录

<?php

class DeleteAction extends CAction
{
    public $pk = 'id';
    public $redirectTo = array('index');
    public $modelClass;
    function run() {
        $pk = Yii::app()->request->getParam($this->pk);
        if (empty($pk))
            throw new CHttpException(404);
        $model = CActiveRecord::model($this->modelClass)->findByPk($pk);
        if (!$model)
            throw new CHttpException(404);

        if ($model->delete()) {
            $this->getController()->redirect($this->redirectTo);
        }

        throw new CHttpException(500);
    }
}

创建ViewAction.php在protected/actions目录下, 用于显示一条明细

<?php
class ViewAction extends CAction{
	public $param = 'id';
	public $renderTo = 'view';
	public $modelClass;
	function run(){
		$pk = Yii::app()->request->getParam($this->param);
        if(empty($pk))  
            throw new CHttpException(404);  
            
        $model = CActiveRecord::model($this->modelClass)->findByPk($pk);  
        if(!$model)  
            throw new CHttpException(404); 
             
		$this->getController()->render($this->renderTo, array('model'=>$model));
	}
}

创建UpdateAction.php在protected/actions目录下, 用于修改一条明细

<?php

class UpdateAction extends CAction
{
    public $param = 'id';
    public $renderTo = 'update';
    public $successRedirect = 'view';
    public $updateArr = [];
    public $modelClass;

    function run() {
        $pk = Yii::app()->request->getParam($this->param);
        if (empty($pk))
            throw new CHttpException(404);

        $model = CActiveRecord::model($this->modelClass)->findByPk($pk);
        if (!$model)
            throw new CHttpException(404);
        $model->scenario = 'update';

        if (!empty($this->updateArr)) {
            $model->attributes = $this->updateArr;
        }
        if (isset($_POST[$this->modelClass])) {
            $model->attributes = $_POST[$this->modelClass];
            if ($model->save())
                $this->getController()->redirect(array($this->successRedirect, 'id' => $model->{$model->tableSchema->primaryKey}));
        }

        $this->getController()->render($this->renderTo, array('model' => $model));
    }
}

创建CreateAction.php在protected/actions目录下, 用于新增一条记录

<?php
class CreateAction extends CAction{
	public $renderTo = 'create';
	public $successRedirect = 'view';
	public $modelClass;
	function run(){
        $model = new $this->modelClass;
        $model->scenario = 'new';   
		if(isset($_POST[$this->modelClass]))
		{
			$model->attributes=$_POST[$this->modelClass];
			if($model->save())
				$this->getController()->redirect( array($this->successRedirect, 'id'=>$model->{$model->tableSchema->primaryKey}) );
		}
		
		$this->getController()->render($this->renderTo, array('model'=>$model));		
	}
}

创建ListAction.php在protected/actions目录下,用于查询列表管理

<?php

class ListAction extends CAction
{
    public $renderTo = 'list';
    public $modelClass;
    public $renderArr = array();
    public $searchArr = array();

    function run() {
        $model = new $this->modelClass('search');
        $model->unsetAttributes(); // clear any default values
        #查询初始化条件
        if (!empty($this->searchArr)) {
            $model->attributes = $this->searchArr;
        }
        if (isset($_REQUEST[$this->modelClass])) { //点击搜索按钮后的查询条件
            $model->attributes = $_REQUEST[$this->modelClass];
            array_map("trim", $model->attributes);
        }
        $params = array_merge(['model' => $model], $this->paramsArr);
        $this->getController()->render($this->renderTo, $params);
    }
}

 

2.PostController.php

<?php
class PostController extends Controller
{
	function actions(){
		return array(
			'create' => array(
				'class'		 => 'application.actions.CreateAction',
				'modelClass' => 'Post',
			),
			'view' => array(
				'class'		 => 'application.actions.ViewAction',
				'param'		 => 'Postid', //getParam('param');
				'modelClass' => 'Post',
			),
			'update' => array(
				'class'		 => 'application.actions.UpdateAction',
				'modelClass' => 'Post',
			),
			'delete' => array(
				'class'		 => 'application.actions.DeleteAction',
				'modelClass' => 'Post',
			),
			'index' => array(
				'class'		 => 'application.actions.ListAction',
				'modelClass' => 'Post',
			),
		);
	}
}

其中class是DeleteAction的路径,pk主键(默认id,可以不写),只需要修改actions,其他的model就可以共用DeleteAction.php,访问时

index.php?r=post/remove?Post_id=1

修改系统gii的Crud Generator模板,可以快速的构建项目 http://hudeyong926.iteye.com/blog/1273561

 

 

 
分享到:
评论

相关推荐

    yii的CURD操作实例详解

    本文实例讲述了yii的CURD操作技巧。分享给大家供大家参考。具体分析如下: CURD是一个数据库技术中的缩写词,一般的项目开发的各种参数的基本功能都是CURD。它代表创建(Create)、更新(Update)、读取(Retrieve)...

    yii2 通用后台系统

    yii 2.0通用后台系统管理,实现注册登录上传用户自定义头像

    yii框架yii框架yii框架yii框架yii框架

    很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架

    Yii 中文帮助文档

    Yii 是一个通用 Web 编程框架,能够开发任何类型的 Web 应用。它是轻量级的,又装配了很好很强大的缓存组件,因此尤其适合开发大流量的应用,比如门户、论坛、内容管理系统(CMS)、电子商务系统,等等。 Yii 和其它...

    Yii权威指南(非常适合新手入门)

    Yii权威指南(非常适合新手入门),想要学习yii的童鞋快点下载吧!绝对能够快速学习

    深入理解Yii2.0

    《深入理解Yii2.0》是一本干货。主要讲解Yii2.0及所代表的最新一代Web开发框架的新特性、新技术、新理念、新模式。 采用的方式是分析框架的源代码,尝试从根上进行理解和阐述,并融入个人使用Yii开发的一些经验和...

    yii刷单平台.zip

    PHP刷单交易任务平台源码 ,yii刷单平台,仅供交流学习。

    Yii2.0打造京东商城平台PHP电商实战Yii2.0视频教程

    Yii2.0级基于Yii1.X完全重写的,不仅是小版本升级的升级。所以想要系统学习Yii2.0这个框架这套教程可以从实战项目带你入手。不错的学习YII框架的基础课程,电商系统的结构完整、框架资源太大,传百度网盘了,链接在...

    yii2swoole让yii2运行在swoole上

    yii2 swoole:让yii2运行在swoole上 , 运行在swoole上的yii2是运行在php-fpm上yii2的5倍以上

    yii framework(Yii)框架window版

    Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。事实上...

    yii2 创建表单 笔记

    yii2 创建表单 笔记

    yii1.1.10 开发包(包含yii权威指南以及yii博客例子讲解)

    yii1.1.10 开发包(包含yii权威指南以及yii博客例子讲解)

    yii框架中文手册教程和YII模板

    yii框架中文手册教程和YII模板 我很辛苦才找到的

    Yii权威指南思维导图

    Yii权威指南思维导图 yii类结构 类导图 权威指南

    yii2.0后台源码

    带权限管理的yii2.0后台框架,适合任何情况,最新的值得使用

    Mastering Yii.pdf(en)

    Yii Framework 2 (Yii2) is the successor to the popular Yii framework. Like its successor, Yii2 is an open source, high-performance rapid development framework designed to create modern, scalable, ...

    Yii 2.0.13.1.zip

    Yii是一个高性能的PHP5的web应用程序开发框架。...安全改进了yii\base\Security::hkdf(),以利用PHP&gt;=7.1.2中的本机hash_hkdf()实现,现在使用mt_rand()代替yii\captcha\CaptchaAction中的rand()。

    Yii2参考手册-新

    Yii2参考手册,Yii2中文手册完整版

Global site tag (gtag.js) - Google Analytics