Yiiでチェックボックスの値を適切に保存する方法がわかりません。 MySQL列active
があり、tinyint
として定義されています。次のフォーム作成コードがあります。値が1の場合はチェックボックスがチェックされ、0の場合はチェックボックスが正しくオフになっています。
<?php echo $form->labelEx($model,'active'); ?>
<?php echo $form->checkBox($model,'active'); ?>
<?php echo $form->error($model,'active'); ?>
フォームを保存するコードは、他のテキストベースの値を正しく変更します。
public function actionUpdate($id)
{
$model=$this->loadModel($id);
if(isset($_POST['Thing']))
{
$model->attributes=$_POST['Thing'];
if($model->save())
$this->redirect(array('thing/index'));
}
$this->render('update',array(
'model'=>$model,
));
}
active
の値は保存されません。どこがいけないの?
ユーザーから受け入れるすべての入力について、model :: rule()で定義する必要があります。 rule()でアクティブに定義されていますか?
HtmlOptions配列を使用して、value属性を指定できます。以下はコード例です。
<?php echo $form->labelEx($model,'active'); ?>
<?php echo $form->checkBox($model,'active', array('value'=>1, 'uncheckValue'=>0)); ?>
<?php echo $form->error($model,'active'); ?>
バージョン1.0.2以降、「uncheckValue」という名前の特別なオプションを使用して、チェックボックスがオフの場合に返される値を指定できます。デフォルトでは、この値は「0」です。 (このテキストはYII Documenration)から引用)
一般的に、データベースへの保存に問題がある場合は、
$model->save();
と
if($model->save() == false) var_dump($model->errors);
そうすれば、保存されなかった理由を正確に確認できます。通常は検証エラーです。
以下に従ってください:1. protected/models/Thing.phpに数値としてアクティブを追加します
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('active', 'numerical', 'integerOnly'=>true),
//OR optional
array('active', 'safe'),
);
}
コントローラーのアクション:そのok
見る:
<?php echo $form->labelEx($model,'active'); ?>
<?php echo $form->checkBox($model,'active', array('value'=>1, 'uncheckValue'=>0)); ?>
<?php echo $form->error($model,'active'); ?>
これがうまくいくことを願っています...
Yiiでブール値とチェックボックスを処理する方法を理解するときに役立つ記事
http://www.larryullman.com/2010/07/25/handling-checkboxes-in-yii-with-non-boolean-values/
DBでビット型フィールドを使用しましたが、機能しませんでした。
1.- I changed the field type to tinyint
2.- In the rules function added:
array('active','numerical'),
3.-In the form (as D3K said) do:
<?echo $form->checkBox($model,'active',array('value'=>1, 'uncheckValue'=>0));?>
この投稿は非常に古くなっていますが、チェックボックスに数値ではなく指定された値を与えるために特に役立つ解決策を見つけました。新しい構文は、ActiveFormを使用しているこの通知のようなものです
1)モデルが=> model3の場合
2)External_Cateringという名前
3)値External_Cateringを受け取り、uncheckValueの場合は空
4)コントローラーでは、モデルを指定するだけで値を取得し、それは$ External_Catering = $ model3-> External_Cateringのような属性です。
私は以前に同じ問題を抱えていますが、データ型をintに変更するので、保存します
safe
にmodel
としてルールを追加して、form
からcontroller
に値を渡すことができます。
array('active', 'safe'),
キャプチャされているすべての属性を印刷して確認できます。アクティブがキャプチャされない場合は、安全であってはなりません。変数を安全であると宣言するか、その変数に関するルールを定義する必要があります。これにより、変数が安全になります。