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

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 通用后台系统

    "yii2 通用后台系统"是一个基于Yii2框架构建的企业级后台管理系统,旨在提供一套全面、高效的后台管理解决方案,包括用户管理、权限控制、数据统计等功能,帮助开发者快速搭建稳定且功能丰富的后台应用。 在Yii2...

    基于yii2的企业通用管理后台

    "一键安装"是指通过简单的步骤快速完成应用的部署,这在Yii2的企业通用管理后台中体现为提供预配置的安装脚本或工具,使得开发者无需手动配置每个细节,大大缩短了项目启动时间。快速部署则强调了系统的易用性和可...

    yii刷单平台.zip

    "yii刷单平台.zip"中包含的项目是一个基于Yii框架构建的刷单交易任务平台源码,用于学习和交流目的。在这个平台中,我们可以深入理解Yii框架的核心特性以及如何在实际项目中运用它。 1. Yii框架简介: Yii,发音...

    yii1.1版本资料整理

    1. Action定义:在Yii中,Action通常以方法的形式存在,方法名以单词"action"开头。开发者还可以定义Action类,这种方式能实现Action的重用。 2. URL解析:Yii的URL解析严格区分大小写,因此,开发者在设置路由时...

    Yii权威指南思维导图

    Active Record允许开发者直接与数据库中的表进行交互,通过对象化的操作方式大大简化了数据操作。另外,Yii还提供了CDbConnection和CDbCommand类来支持更底层的SQL操作。 路由管理是Yii框架的重要特性,它决定了URL...

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

    - **描述**: "Yii权威指南(非常适合新手入门),想要学习yii的童鞋快点下载吧!绝对能够快速学习" **解释**: 本指南旨在帮助初学者快速掌握Yii框架的基础知识与应用技巧,特别适合于没有或仅有少量Yii经验的学习者。...

    基于Yii2+Vue2.0+uniapp六端通用商城小程序后台

    基于Yii2+Vue2.0+uniapp 前沿技术研发,易学易用,前后端分离,多端开发,负载均衡,性能优越架构稳定;商城商品、订单、用户精细化管理;涵盖秒杀、消费奖励、超级海报等20+营销插件;H5+小程序+公众号+PC,全渠道...

    Yii 中文帮助文档

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

    Yii 2文件下载

    标题提到的"Yii 2文件下载"可能指的是Yii 2.0框架的安装包或者相关的扩展或示例代码。 在描述中,我们看到“找了好久才找到的Yii2.0”,这可能暗示了Yii 2.0的相关资源并不总是容易找到,尤其对于初学者来说,可能...

    YII 2数据库迁移(Migrations) 使用教程

    在`safeUp()`方法中,可以使用Yii 2提供的数据库操作API来创建数据表,并定义字段。例如: ```php public function safeUp() { $tableOptions = null; if ($this-&gt;db-&gt;driverName === 'mysql') { // 设置表为...

    yii2swoole让yii2运行在swoole上

    1. **Yii2框架与Swoole的集成**:Yii2swoole是将Yii2框架与Swoole进行整合的扩展,允许Yii2应用利用Swoole的高性能特性。它提供了在Swoole环境下运行Yii2的基础设施,包括请求处理、事件监听、session和cookie管理等...

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

    Yii框架是一款高效的、基于组件的PHP开发框架,用于...总之,Yii框架中文手册教程和YII模板资源是学习和开发Yii应用的宝贵资料。通过深入学习和实践,开发者可以充分利用Yii的强大功能,构建出高效、可扩展的Web应用。

    yii的小部件使用

    ### yii的小部件使用 在Yii框架中,小部件(Widgets)是用于封装并重用页面元素的一种机制。本文主要探讨如何在Yii框架中利用小部件(Widgets)来提高开发效率,尤其是在快速生成增删改查功能时的具体应用,并结合...

    基于Yii2+layui的后台框架模板,实现了完善的RBAC权限控制-yii2-admin-theme.zip

    6. **数据库迁移**:可能有迁移脚本(migrations),用于创建RBAC相关的数据库表。 通过这个项目,开发者可以快速搭建起一个功能完备的后台管理系统,包括用户登录、角色分配、权限设置等功能。同时,layui的使用...

    yii2-v2.0.6

    Yii 2.0.6 是一个非常重要的版本更新,在这个框架的迭代历程中扮演了关键的角色。Yii 2 是一个高性能、组件化的 PHP 框架,专为开发 Web 2.0 应用程序而设计。这次更新的版本 2.0.6 带来了许多改进和修复,使得...

    深入理解Yii2.0

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

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

    Yii 1.1.10是该框架的一个版本,它提供了丰富的特性和优化,以帮助开发者更高效地构建复杂的Web应用程序。这个开发包包含了Yii框架的核心库、相关的文档和一个具体的博客应用实例,这对于初学者和有经验的开发者来说...

Global site tag (gtag.js) - Google Analytics