我在表单中有一个div但是我不太确定如何将所选值检索到控制器中:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'system-users-form',
'enableAjaxValidation'=>false,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<button id="abutton">Already a Supplier</button>
<br>
<div class="row" id="toshow" style="display:none" name="suppliers">
<?php $supplier = SupplierHead::model()->findAll();
$list = CHtml::listData($supplier ,'head_id','head_name');
echo $form->DropDownList($model,'party_id',
$list, array('prompt'=>'Select Supplier'));
?>
</div>
<script>
$(document).ready(function() {
$("#abutton").click(function(e){
e.preventDefault();
$("#toshow").css('display', 'block');
});
});
</script>
<div class="row">
<?php echo $form->labelEx($model,'username'); ?>
<?php echo $form->textField($model,'username',array('size'=>60,'maxlength'=>200)); ?>
<?php echo $form->error($model,'username'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'password'); ?>
<?php echo $form->passwordField($model,'password',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'password'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
请注意,此行也属于另一个模型。我如何在另一个控制器中检索它?
控制器代码:
public function actionCreate()
{
$model = new SystemUsers;
$modelParties = new Parties;
$modelPersons = new Persons;
$supplierHead = new SupplierHead;
// $modelPR = new PartyRoles;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($invoice);
if (isset($_POST['SystemUsers']))
{
$model->attributes = $_POST['SystemUsers'];
Yii::app()->db->createCommand("insert into parties (party_type_id) values ('1')")->execute();
$id = Yii::app()->db->lastInsertId;
$_POST["SupplierHead"]["party_id"];
$model->password = md5($model->password);
$model->party_id = $id;
$model->status = "Approved";
$model->date_modified = new CDbExpression('NOW()');
$email = $model->username;
if($company != null)
{
Yii::app()->db->createCommand("insert into persons (party_id,email,company_name) values ('".$id."','".$email."','".$company."')")->execute();
}
Yii::app()->db->createCommand("insert into persons (party_id,email) values ('".$id."','".$email."')")->execute();
Yii::app()->db->createCommand("insert into party_roles(party_id,role_id) values ('".$id."','2')")->execute();
/*
$valid = true;
$valid &= $model->validate();
$valid &= $modelParties->validate();
if($valid)
{
$modelParties->save();
$model->party_id = $modelParties->getPrimaryKey(); */
if($model->save())
echo ("<SCRIPT LANGUAGE='JavaScript'>
window.alert('User Created')
window.location.href='create';
</SCRIPT>");
// }
else $this->redirect(array('views22','id'=>$model->id));
}
$this->render('create',array(
'parties'=>$modelParties,
'model'=>$model,
));
}
SystemUsers模型:
public function tableName()
{
return 'system_users';
}
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('username, password', 'required'),
array('isLogin', 'numerical', 'integerOnly'=>true),
array('date_modified','default',
'value'=>new CDbExpression('NOW()'),
),
array('date_last_login','default',
'value'=>new CDbExpression('NOW()'),
),
array('date_created','default',
'value'=>new CDbExpression('NOW()'),
),
array('status','default','value'=>'Approved'),
array('user_role','default','value'=>'MEMBER'),
array('isLogin','default','value'=>'1'),
array('username', 'length', 'max'=>200),
array('password', 'length', 'max'=>255),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
);
}
修改
我添加了我的模型和表格的其余部分,以向您展示混乱。下拉列表div是我试图输入到不同模型的值,它不作为system_users的属性存在,因此它不会通过POST。
答案 0 :(得分:3)
首先确保您的模型的属性具有安全规则。 其次,在控制器中获取转储以查看通过POST请求发送的内容。如下所示:
CVarDumper::dump($_POST,5678,true);
Yii::app()->end();
第三,在你的转储中找到你的下拉元素。 在Yii中,您还可以获得如下的帖子值:
Yii::app()->request->getPost('YOUR DROPDOWN NAME');
<强>更新强>
正如我先说的那样,你必须确保你的属性是安全的。 在您的模型中添加如下规则:
array('THE NAME OF YOUR DROPDOWN','safe'),
我希望它有所帮助。
答案 1 :(得分:1)
@charlesisjan这也取决于调试。实际上$ _POST是一个包含数组集合的数组,而且这些数组是一组键值对,如
array(
'key'=>'value'
)
首先,您需要确保是否在表单中提交了party_id
。我确信它正在提交。
现在
if (isset($_POST['SystemUsers']))
{
使用
CVarDumper::Dump($_POST,100,true);
die();
我正在使用虚拟代码。 它会显示$ _POST数组,如
array ( 'User' => array ( 'username' => 'rafasd' 'password' => 'asdfas' 'email' => 'asd@yahoo.com' ) 'yt0' => '' )
在上面的代码中,因为用户本身就是一个数组,所以你可以访问用户名
$_POST['User']['username']
现在尝试找出party_id在$ _POST数组中的位置。当你发现你可以使用上面提到的模式
来访问它的价值时答案 2 :(得分:0)
你可以得到:
$id = $_POST["SystemUsers"]["party_id"]
根据您的代码,下拉名称将设置为“Model_name [Field_name]”。
在您的操作中,您可以看到
行$some_variable = $_POST["SystemUsers"]; // SystemUsers is model name
答案 3 :(得分:0)
请更改您的
$_POST["SupplierHead"]["party_id"];
用这个
$_POST["SystemUsers"]["party_id"];
在你的控制器动作创建中,我认为错误就在这里!
此外,如果party_id
是您的主键,则不要在下拉列表中使用,在模型中创建新的公共变量,并在下拉列表中使用。