web-dev-qa-db-ja.com

Yii

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の値は保存されません。どこがいけないの?

15
Matt Hampel

ユーザーから受け入れるすべての入力について、model :: rule()で定義する必要があります。 rule()でアクティブに定義されていますか?

16
Dafeng

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)から引用)

20
D3 K

一般的に、データベースへの保存に問題がある場合は、

$model->save();

if($model->save() == false) var_dump($model->errors);

そうすれば、保存されなかった理由を正確に確認できます。通常は検証エラーです。

6
Neil McGuigan

以下に従ってください: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'); ?>

これがうまくいくことを願っています...

6
Php Sofsol

Yiiでブール値とチェックボックスを処理する方法を理解するときに役立つ記事

http://www.larryullman.com/2010/07/25/handling-checkboxes-in-yii-with-non-boolean-values/

2
Alexei Tenitski

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));?> 
1
Toño

この投稿は非常に古くなっていますが、チェックボックスに数値ではなく指定された値を与えるために特に役立つ解決策を見つけました。新しい構文は、ActiveFormを使用しているこの通知のようなものです

1)モデルが=> model3の場合

2)External_Cateringという名前

3)値External_Cateringを受け取り、uncheckValueの場合は空

4)コントローラーでは、モデルを指定するだけで値を取得し、それは$ External_Catering = $ model3-> External_Cateringのような属性です。

0
Amar Dje

私は以前に同じ問題を抱えていますが、データ型をintに変更するので、保存します

0
trai bui

safemodelとしてルールを追加して、formからcontrollerに値を渡すことができます。

array('active', 'safe'),
0

キャプチャされているすべての属性を印刷して確認できます。アクティブがキャプチャされない場合は、安全であってはなりません。変数を安全であると宣言するか、その変数に関するルールを定義する必要があります。これにより、変数が安全になります。

0
Dhiraj Pandey