用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操作技巧。分享给大家供大家参考。具体分析如下: CURD是一个数据库技术中的缩写词,一般的项目开发的各种参数的基本功能都是CURD。它代表创建(Create)、更新(Update)、读取(Retrieve)...
yii 2.0通用后台系统管理,实现注册登录上传用户自定义头像
很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架
Yii 是一个通用 Web 编程框架,能够开发任何类型的 Web 应用。它是轻量级的,又装配了很好很强大的缓存组件,因此尤其适合开发大流量的应用,比如门户、论坛、内容管理系统(CMS)、电子商务系统,等等。 Yii 和其它...
Yii权威指南(非常适合新手入门),想要学习yii的童鞋快点下载吧!绝对能够快速学习
《深入理解Yii2.0》是一本干货。主要讲解Yii2.0及所代表的最新一代Web开发框架的新特性、新技术、新理念、新模式。 采用的方式是分析框架的源代码,尝试从根上进行理解和阐述,并融入个人使用Yii开发的一些经验和...
PHP刷单交易任务平台源码 ,yii刷单平台,仅供交流学习。
Yii2.0级基于Yii1.X完全重写的,不仅是小版本升级的升级。所以想要系统学习Yii2.0这个框架这套教程可以从实战项目带你入手。不错的学习YII框架的基础课程,电商系统的结构完整、框架资源太大,传百度网盘了,链接在...
yii2 swoole:让yii2运行在swoole上 , 运行在swoole上的yii2是运行在php-fpm上yii2的5倍以上
Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。事实上...
yii2 创建表单 笔记
yii1.1.10 开发包(包含yii权威指南以及yii博客例子讲解)
yii框架中文手册教程和YII模板 我很辛苦才找到的
Yii权威指南思维导图 yii类结构 类导图 权威指南
带权限管理的yii2.0后台框架,适合任何情况,最新的值得使用
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是一个高性能的PHP5的web应用程序开发框架。...安全改进了yii\base\Security::hkdf(),以利用PHP>=7.1.2中的本机hash_hkdf()实现,现在使用mt_rand()代替yii\captcha\CaptchaAction中的rand()。
Yii2参考手册,Yii2中文手册完整版