Answer the question
In order to leave comments, you need to log in
How to make multiple kartik cruds (models) on one page?
I want to combine several CRUD (models) in one controller. It turned out to implement only the index page
public function actionIndex()
{
$searchModel = new SettingSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$searchHall = new HallSearch();
$dataHall = $searchHall->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'searchHall' => $searchHall,
'dataHall' => $dataHall,
]);
}
<?php
namespace backend\controllers\setting;
use backend\models\setting\Hall;
use backend\models\setting\HallSearch;
use Yii;
use backend\models\setting\Setting;
use backend\models\setting\SettingSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use \yii\web\Response;
use yii\helpers\Html;
/**
* Updates an existing Setting model.
* For ajax request will return json object
* and for non-ajax request if update is successful, the browser will be redirected to the 'view' page.
* @param integer $id
* @return mixed
*/
public function actionUpdate($id)
{
$request = Yii::$app->request;
$model = $this->findModel($id);
if($request->isAjax){
/*
* Process for ajax request
*/
Yii::$app->response->format = Response::FORMAT_JSON;
if($request->isGet){
return [
'title'=> " ".Yii::t('backend', 'Update')." ".Yii::t('backend', 'Setting')." #".$id." ",
'content'=>$this->renderAjax('update', [
'model' => $model,
]),
'footer'=> Html::button(Yii::t('backend', 'Close'),['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]).
Html::button(Yii::t('backend', 'Save'),['class'=>'btn btn-primary','type'=>"submit"])
];
}else if($model->load($request->post()) && $model->save()){
return [
'forceReload'=>'#crud-datatable-pjax',
'title'=> " ".Yii::t('backend', 'Setting')." #".$id." ",
'content'=>$this->renderAjax('view', [
'model' => $model,
]),
'footer'=> Html::button(Yii::t('backend', 'Close'),['class'=>'btn btn-default','data-dismiss'=>"modal"]).
Html::a(Yii::t('backend', 'Edit'),['update','id'=>$id],['class'=>'btn btn-primary pull-left','role'=>'modal-remote'])
];
}else{
return [
'title'=> "Изменение ".Yii::t('backend', 'Setting')." #".$id." ",
'content'=>$this->renderAjax('update', [
'model' => $model,
]),
'footer'=> Html::button(Yii::t('backend', 'Close'),['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]).
Html::button(Yii::t('backend', 'Save'),['class'=>'btn btn-primary','type'=>"submit"])
];
}
}else{
/*
* Process for non-ajax request
*/
if ($model->load($request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
}
/**
* Delete an existing Setting model.
* For ajax request will return json object
* and for non-ajax request if deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
*/
public function actionDelete($id)
{
$request = Yii::$app->request;
$this->findModel($id)->delete();
if($request->isAjax){
/*
* Process for ajax request
*/
Yii::$app->response->format = Response::FORMAT_JSON;
return ['forceClose'=>true,'forceReload'=>'#crud-datatable-pjax'];
}else{
/*
* Process for non-ajax request
*/
return $this->redirect(['index']);
}
}
/**
* Delete multiple existing Setting model.
* For ajax request will return json object
* and for non-ajax request if deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
*/
public function actionBulkDelete()
{
$request = Yii::$app->request;
$pks = explode(',', $request->post( 'pks' )); // Array or selected records primary keys
foreach ( $pks as $pk ) {
$model = $this->findModel($pk);
$model->delete();
}
if($request->isAjax){
/*
* Process for ajax request
*/
Yii::$app->response->format = Response::FORMAT_JSON;
return ['forceClose'=>true,'forceReload'=>'#crud-datatable-pjax'];
}else{
/*
* Process for non-ajax request
*/
return $this->redirect(['index']);
}
}
/**
* Finds the Setting model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param integer $id
* @return Setting the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModel($id)
{
if (($model = Setting::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
}
Answer the question
In order to leave comments, you need to log in
1. Displaying multiple GridViews can be done like this
2. If displaying multiple GridViews on a page is a very real task, then implementing a bunch of multiple models in one controller is a bad practice that turns the code into a mess. Therefore, I strongly recommend to abandon this idea
3. As for the formation of links, I recommend reading this
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question