codejunkie
codejunkie

Reputation: 77

(Yii2) how to pass value from table to an HTML button

I'm new to Yii2 and currently I'm working on the admin section in which admin could update a typical webpage, in this case, the "About us" page. The application will check if there's already an existing row in the "About" table. If so, an "Update" button will be shown right in the view's index page as only one content is allowed in the "About us" section. Else, a "create" button will be shown. The update in the gridview works well but I wonder how to pass the "id" value in the table into the update button because I keep getting the error message "missing required parameters id". I've spent a whole day but stil stuck. Thank you in advance for your kind help.

This is how my Index looks like :

<?php
 if(!$dataProvider)
        {
            echo Html::a('Create', ['create'], ['class' => 'btn btn-success']) ;
        }
        else
        {   

            echo Html::a('Update-about', ['update'], ['class' => 'btn btn-success']);
        }
        ?>
    </p>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],


            'Tite',
            'Content:ntext',
            'Date',
            'ImageID',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

And this is the controller:

 public function actionIndex()
    {
        $searchModel = new aboutSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

public function actionUpdate($id)
    {   


        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->ID]);
        } else {
            return $this->render('update', [
                'model' => $model,

            ]);
        }
    }

Upvotes: 0

Views: 1161

Answers (1)

Anton Rybalko
Anton Rybalko

Reputation: 1314

Link should be

Html::a('Update-about', ['update', 'id' => $id], ['class' => 'btn btn-success']);

And you should pass ID of the row to index view:

return $this->render('index', [
    'searchModel' => $searchModel,
    'dataProvider' => $dataProvider,
    'id' => $id,
]);

So the main question is - what row of table About you want to change by update action? If this is the first available record then:

public function actionIndex()
{
    $searchModel = new aboutSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    $about = About::find()->one(); // get first record found

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
        'id' => $about->id, // pass record id to view
    ]);
}

Or find the row you need by passing some condition to where method: About::find()->where(...)->one();

Upvotes: 0

Related Questions