Change action in Yii system

I am working on a web application that allows users to video conferencing. Users are allowed to create video conferencing and I want them to be able to edit scheduled video conferencing too, but I am having problems with that. Please, help.

Edit button in index.php view

 $html .=   CHtml::ajaxLink('Edit',
        Yii::app()->createAbsoluteUrl('videoConference/update/'.$vc->id),
        array(
            'type'=>'post',
            'data' => array('id' =>$vc->id,'type'=>'update'),
        ),
        array( "visible" =>  $ismoderator, 'role' => "button", "class" => "btn btn-info")
    );

      

Video Conferencing Controller Action Update

/**
 * Updates a particular model.
 * If update is successful, the browser will be redirected to the 'view' page.
 * @param integer $id the ID of the model to be updated
 */
public function actionUpdate($id)
{
    $model = $this->loadModel($id);

    if (isset($_POST['VideoConference'])) {
        $model->attributes = $_POST['VideoConference'];
        if ($model->save())
            $this->redirect(array('view', 'id' => $model->id));
    }

    $this->render('edit', array(
        'model' => $model,
    ));

}

      

+3


source to share


2 answers


After a little troubleshooting, I finally got it to work. In the view, I call the actionUpdate method like this:

        $html .=   CHtml::button('Edit', array('submit' => array('videoConference/update/'.$vc->id), "visible" =>  $ismoderator, 'role' => "button", "class" => "btn btn-info"));

      

On the controller just changed



$model->save() to $model->update()

      

and it works great.

+1


source


The first step is to find where the problem is (frontend / backend). You need to call the action without ajax (only with url with param id). Try my version:

/**
 * Updates a particular model.
 * If update is successful, the browser will be redirected to the 'view' page.
 * @param integer $id the ID of the model to be updated
 */
public function actionUpdate($id)
{
    $model = $this->loadModel($id);
    if ($model == null) {
       throw new CHttpException(404, 'Model not exist.');
    }
    //if (isset($_POST['VideoConference'])) {
    //$model->attributes = $_POST['VideoConference'];

    $model->attributes = array('your_attr' => 'val', /* etc... */);
        // or try to set 1 attribute $model->yourAttr = 'test';
    if ($model->validate()) {
        $model->update(); //better use update(), not save() for updating.
        $this->redirect(array('view', 'id' => $model->id));
    } else {
        //check errors of validation
        var_dump($model->getErrors());
        die();
    }
    //}
    $this->render('edit', array(
        'model' => $model,
    ));
}

      



If everything works fine on the server side (line is updated), check the query parameters, console, tokens, etc. The problem will be in the interface.

+1


source







All Articles