yii 一个表单提交多个模型数据

正在需要的时候发现了这个大牛的博文,动手实践过后,记录在此。

--user表
Create Table: CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(45) DEFAULT NULL,
  `userpass` varchar(45) DEFAULT NULL,
  `profile_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_msjy_user_1_idx` (`profile_id`),
  CONSTRAINT `profile_id` FOREIGN KEY (`profile_id`) 
REFERENCES `msjy_profile` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

--profile表
Create Table: CREATE TABLE `msjy_profile` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `status` tinyint(4) DEFAULT NULL,
  `address` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8

接下来,gii生成user和profile模型

然后gii生成RegisterController并整理成如下:

class RegisterController extends Controller
{
	public function actionIndex()
	{
		$this->render(‘index‘);
	}

	public function actionCreate()
	 {
	     $modelA = new User;
	     $modelB = new Profile;
	     if(isset($_POST[‘User‘]) && isset($_POST[‘Profile‘]))
	     {
	         $modelA->attributes=$_POST[‘User‘];
	         $modelB->attributes=$_POST[‘Profile‘];
	         
	         if($modelA->validate() && $modelB->validate())
	         {
	             if ($modelB->save(false))
	             {

	                      $modelA->profile_id = $modelB->id;
	                       if ($modelA->save(false))
	                       {
	                             $this->redirect(array(‘User/view‘,‘id‘=>$modelA->id));
	                       }
	             }
	          }
	     }
	     $this->render(‘create‘,array(
	         ‘modelA‘=>$modelA,
	         ‘modelB‘=>$modelB,
	     ));
	 }

}

在views里的register包里创建

--create.php
 <?php echo $this->renderPartial(‘_form‘, array(‘modelA‘=>$modelA,‘modelB‘=>$modelB)); ?>
_form.php
<div class="form">

<?php $form=$this->beginWidget(‘CActiveForm‘, array(
    ‘id‘=>‘User-form‘,
    ‘enableAjaxValidation‘=>false,
)); ?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary(array($modelA,$modelB)); ?>//注意这里

    <div class="row">
        <?php echo $form->labelEx($modelA,‘username‘); ?>
        <?php echo $form->textField($modelA,‘username‘); ?>
        <?php echo $form->error($modelA,‘username‘); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($modelA,‘userpass‘); ?>
        <?php echo $form->textField($modelA,‘userpass‘); ?>
        <?php echo $form->error($modelA,‘userpass‘); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($modelB,‘status‘); ?>
        <?php echo $form->textField($modelB,‘status‘); ?>
        <?php echo $form->error($modelB,‘status‘); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($modelB,‘address‘); ?>
        <?php echo $form->textField($modelB,‘address‘); ?>
        <?php echo $form->error($modelB,‘address‘); ?>
</div><div class="row">
</div><div class="row buttons">
<?php echo CHtml::submitButton($modelA->isNewRecord ? ‘Create‘ : ‘Save‘); ?>
	</div>    
<?php $this->endWidget(); ?>
</div>

另外,关于create方法里的验证,原文有说明,此处省略文字若干。。。。。

yii 一个表单提交多个模型数据,布布扣,bubuko.com

时间: 2024-10-21 05:29:11

yii 一个表单提交多个模型数据的相关文章

php 表单提交错误后返回数据消失问题的解决方法

本文章向码农们介绍php 表单提交错误后返回数据消失问题的解决方法,感兴趣的码农可以参考一下. 表单提交错误后返回数据消失怎么办呐,今天就来分析解决一下这个问题. 状况概述: 做填写表单信息提交的时候会碰到一个问题就是当用户填写并提交表单后,程序判断不符合要求并返回,返回之后之前填写的表单信息会被清空了的情况.如果填写的信息量少还无所谓,如果填写的信息量比较多,这会直接打击到填写信息的人的良好心情.因此解决表单提交错误返回后填写的内容消失的问题是一个提高用户体验度的迫在眉睫的问题. 对于这种问题

碰到诡异问题,求助大能解答,关于表单提交大文件无限数据提交问题

服务器环境 php环境 出现情况:上传30M文件的时候 本地数据一直在提交,观察服务器io 也一直有下载流量.但是就没有个结束,php输出 $_FILES,也不会执行到这行代码,比如我提交30M文件表单提交,但是流量估计超过好几百M也不会停止,反正不人为停止脚步,就是不断在数据交互.请问有大哥碰到这情况吗?是否哪些php配置没配置对 大文件上传问题已解决 以我测试上传32M文件大小为例 php 运行方式 FPM-FCGI php.ini upload_max_filesize = 64M//上传

iframe+javascript实现一个表单提交后多个处理文件按序处理

最近在弄一个网页的问题,总结如下. [问题描述] 页面中包括以下几个部分:1)表单form,供用户输入图片文件:2)iframe1,显示a.php文件的内容,a.php接收客户端图片并保存,后台程序处理图片,生成相关数据文件:3)iframe2,显示b.php文件的内容,b.php读取结果文件对其进行分页显示: [实现思路] 以上功能主要在于两个问题: 1,form表单提交的形式一般是:input type="sumit"的表单元素配合form的action地址完成提交.此处要求先用a

给一个表单提交绑定一个点击事件

如果给一个表单绑定一个点击事件会发生什么事情 <input type="submit" name="button" value="提交内容" class="btn btn-primary" /> (提交快捷键: $(".btn").click(function(){ window.alert("add"); }) 如上面所示的:会先执行点击事件,然后再进行提交,这样能够进行验

Struts2表单提交的中文字符数据用hibernate存储在数据库中是乱码的问题。

1.先检查中文字符出现乱码的位置,于是就在action中用printf方法打印表单提交的中文数据到控制台,发现是乱码. 2.于是问题就转换成了先解决jsp表单提交的中文数据到action中出现乱码的问题, 3.百度了一下,发现是因为我的struts.xml文件建立的时候直接在网上copy的模板,encoding属性设置的是UTF-8我忽略了,而我jsp的encoding属性设置的是gbk,导致两者不一致(因为之前入门的时候教程里面讲的就是gbk方式,于是我也沿用了这种方式.)我eclipse的文

ajax的表单提交,与传送数据

ajax的表单提交 $.ajax ({ url: "<%=basePath%>resource/addPortDetectOne.action", dataType: "json", method : 'post', data: $("#form_portDetect").serialize(),              //传送表单数据 success : function(data_) { //alert(data_); ale

jq 构造函数,然后再表单提交过程中对数据进行修改

先贴代码 <script type="text/javascript"> function appendText(){ var content = $("#textarea").val(); var new_content = content + "wap"; $("#textarea").attr("value",new_content); }; </script> 然后再在 fo

JSP页面一个表单提交两个不同的action

<%@page import="java.sql.ResultSet"%> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.io.*,java.util.*,java.sql.*,shouqisystem.user.*&

Ajax模拟Form表单提交,含多种数据上传

<div> <table id="outputInfo"> <tr><td>Client</td><td><input id='ClientName' type='text'></td></tr> <tr><td>CropID</td><td><input id='CropID' type='text' /></t