如何解决保存倍数复选框
我有一个带有通过“候选人”模型生成的CheckboxList的表单,我需要进行投票,投票者可以选择多个候选人并进行记录。
如何“挑选”选定的候选人并将其写入投票表/模型?
“投票”表格
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model,'candidato_id')->checkboxList(ArrayHelper::map(Candidatos::find()->where(['status' => 1])->orderBy("nome ASC")->all(),'id','nome')); ?>
<?= Html::activeHiddenInput($model,'eleicao_id',['value' => 1]) ?>
<?= Html::activeHiddenInput($model,'cargo_id','urna_id',['value' => 1]) ?>
<div class="form-group">
<?= Html::submitButton('Save',['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
模型“ Votos”
namespace app\models;
use Yii;
class Votos extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'votos';
}
public function rules()
{
return [
[['eleicao_id','candidato_id','data'],'required'],[['eleicao_id','urna_id'],'integer'],[['data'],'safe'],];
}
public function attributeLabels()
{
return [
'id' => 'ID','eleicao_id' => 'Eleicao ID','candidato_id' => 'Candidato ID','cargo_id' => 'Cargo ID','urna_id' => 'Urna ID','data' => 'Data',];
}
}
控制器“ VotosControllers”
public function actionVotacao()
{
$model = new Votos();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view','id' => $model->id]);
}
return $this->render('votacao',[
'model' => $model,]);
}
解决方法
稍微不相关,但是如果您还没有的话,我强烈建议您确保已设置xdebug之类的东西,以便在进行更改时快速查看代码在做什么。能够设置断点并查看您的表单已提交的内容可以极大地帮助您自己解决此类问题,并且框架不会那么神秘。这样一来,就控制器而言,以下MIGHT可能会有所帮助。我还要添加其他验证方法。也许是read up on here的each
验证者。对于actionUpdate()
,您需要查看删除与相关ID相关的所有值,然后重新填充新的ID,并检出deleteAll
。希望我不会为提供这种解决方案而感到沮丧,这不是解决方案的下降。
public function actionVotacao()
{
$model = new Votos();
if (Yii::$app->request->isPost) {
$model->load(Yii::$app->request->post());
if ($model->save()) {
// Save the checkbox values.
if (!empty(Yii::$app->request->post()['Votos']['XXXX'])) { // Your form should give you an idea of what the XXXX should be,xdebug is also your friend.
foreach (Yii::$app->request->post()['Votos']['XXXX'] as $candidato_id) {
$candidato = new Candidato();
$candidato->id = $candidato_id;
if (!$candidato->save()) print_r($candidato->errors);
}
}
}
return $this->redirect(['view','id' => $model->id]);
}
return $this->render('create',[
'model' => $model,]);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。