1

私は Yii フレームワークに少し慣れていません。3つの基本モデルを持つ製品販売Webサイトを作成してい
ます1.主キーIDを含むユーザーモデル 2.主キーIDを含む製品モデル 3.基本的に製品と注文の間のマッピングである注文モデル。これには、フィールドproduct_idおよびuser_id外部キーとして含まれています。

すべての製品が表示され、ログインしたユーザーが製品ボックスのボタンをクリックして特定の製品を注文できるページを作成しました。
リンクのコードはこのようなものです

<?php echo CHtml::link('Order Now',array('order', 'product_id'=>$model->id, 'user_id'=>Yii::app()->user->id)); ?>
(Q1) GETリクエストの送信ですが、詳細をポストリクエストで送信したいです。これを行う方法?

私のデフォルトのコントローラーはサイトコントローラーです。このコントローラーで actionOrder メソッドを作成しました。コードは次のとおりです。

if(Yii::app()->user->isGuest){
$this->redirect('login');
}else{

    $model=new Orders;
    if(isset($_POST['products_id']))
    {
        $model->attributes->products_id=$_POST['product_id'];
        $model->attributes->users_id=Yii::app()->user->id;
        if($model->save())
            $this->redirect(array('index'));
    }

    $this->render('index');
}

しかし、このコードはたくさんのエラーを示しています。また、(Q2)と の両方products_idusers_id1 つの配列に入れOrdersて、書き込むだけで済むようにするにはどうすればよいですか?$_POST['orders'] また、(Q3)保存が成功した後にフラッシュ メッセージを表示するにはどうすればよいですか?

私の3つの問題を解決するのを手伝ってください。質問があまりにもばかげていると感じたら申し訳ありません.

4

3 に答える 3

2

Q1 : POST リクエストを使用する場合は、一種のフォーム (この場合は CActiveForm) を使用する必要があります。

コントローラ:

public function actionOrder() 
{
    if(Yii::app()->user->isGuest)
        $this->redirect('login');
    else 
    {
        $model=new Orders;
        if(isset($_POST['Orders']))
        {
            $model->product_id=$_POST['Orders']['products_id'];
            $model->users_id = Yii::app()->user->id;
            if($model->save()) 
            {
                // Q3: set the flashmessage
                Yii::app()->user->setFlash('ordered','The product has been ordered!'); 
                $this->redirect(array('index'));
            }
        }
        $this->render('index', array('model'=>$model)); //send the orders model to the view
    }
}

意見:

<!-- Q3: show the flash message if it's set -->
<?php if (Yii::app()->user->hasFlash('ordered')): ?>

    <?php echo Yii::app()->user->getFlash('ordered');  ?>

<?php endif ?>

...

<?php $form=$this->beginWidget('CActiveForm', array('id'=>'order-form')); ?>

<?php echo $form->hiddenField($model,'products_id',array('value'=>$product->id)); ?> // please note the change of variable name

<?php echo CHtml::submitButton('Order Now'); ?>

<?php $this->endWidget(); ?>

フォームの Orders モデルに使用するため$model、製品モデル変数の名前を に変更したことに注意してください。$product$model

Q2 : この場合users_id、コントローラーに値を設定したため$_POST['Orders']、 の値のみが含まれていますproducts_id。yii では、次のようにして属性を一括で割り当てることもできます:

$model->attributes = $_POST['Orders']

これは基本$_POST['Orders']的に、フォーム内の属性名と値を含む連想配列が既に存在することを意味します。

Q3 : コードは、注文が成功した後にフラッシュ メッセージを設定して表示する方法を示しています。

于 2013-10-20T19:13:43.167 に答える
0

最初に、フォームの送信メソッドを宣言する必要があります。ブートストラップを使用している場合は、私のようになります:

<?php $form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(
    'action' => Yii::app()->createUrl($this->route),
    'method' => 'post',
    'id' => 'activity_timeRpt',
));
?>

次に、カスタム入力を送信する場合は、指定する必要があります。指定しないと、次のようになります

私はこれを終わらせるために戻ってきます

于 2013-10-20T13:33:00.590 に答える