From 16a622e0e183967d5b81eb9bad24498b25749496 Mon Sep 17 00:00:00 2001 From: blobt <380255922@qq.com> Date: Fri, 4 Oct 2019 23:00:16 +0800 Subject: [PATCH] =?UTF-8?q?basic=20crud=E6=A8=A1=E6=9D=BF=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/models/Cat.php | 58 ++++++ .../skeleton/kcadmin/config/main-local.php | 9 + kcadmin/views/category/index.php | 5 +- .../generators/crud/default/controller.php | 179 ++++++++++++++++++ .../blobt/generators/crud/default/search.php | 86 +++++++++ .../generators/crud/default/views/_form.php | 42 ++++ .../generators/crud/default/views/_search.php | 49 +++++ .../generators/crud/default/views/create.php | 29 +++ .../generators/crud/default/views/index.php | 105 ++++++++++ .../generators/crud/default/views/update.php | 40 ++++ .../generators/crud/default/views/view.php | 58 ++++++ 11 files changed, 657 insertions(+), 3 deletions(-) create mode 100644 common/models/Cat.php create mode 100644 vendor/blobt/generators/crud/default/controller.php create mode 100644 vendor/blobt/generators/crud/default/search.php create mode 100644 vendor/blobt/generators/crud/default/views/_form.php create mode 100644 vendor/blobt/generators/crud/default/views/_search.php create mode 100644 vendor/blobt/generators/crud/default/views/create.php create mode 100644 vendor/blobt/generators/crud/default/views/index.php create mode 100644 vendor/blobt/generators/crud/default/views/update.php create mode 100644 vendor/blobt/generators/crud/default/views/view.php diff --git a/common/models/Cat.php b/common/models/Cat.php new file mode 100644 index 0000000..008a51b --- /dev/null +++ b/common/models/Cat.php @@ -0,0 +1,58 @@ + 64], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'cat_name' => 'Cat Name', + 'icon' => 'Icon', + 'icon_type' => 'Icon Type', + 'description' => 'Description', + 'sort_order' => 'Sort Order', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + ]; + } +} diff --git a/environments/skeleton/kcadmin/config/main-local.php b/environments/skeleton/kcadmin/config/main-local.php index d9a8ceb..19781e7 100644 --- a/environments/skeleton/kcadmin/config/main-local.php +++ b/environments/skeleton/kcadmin/config/main-local.php @@ -19,6 +19,15 @@ if (!YII_ENV_TEST) { $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', + 'allowedIPs' => ['127.0.0.1'], + 'generators' => [ + 'crud' => [ + 'class' => 'yii\gii\generators\crud\Generator', + 'templates' => [ + 'blobtCrud' => '@blobt/generators/crud/default', + ] + ] + ], ]; } diff --git a/kcadmin/views/category/index.php b/kcadmin/views/category/index.php index 32f4079..802b98d 100644 --- a/kcadmin/views/category/index.php +++ b/kcadmin/views/category/index.php @@ -14,8 +14,7 @@ $this->params['breadcrumbs'][] = $this->title; ?>
- $dataProvider, 'filter' => $this->render("_search", ['model' => $searchModel]), 'batch' => [ @@ -61,7 +60,7 @@ $this->params['breadcrumbs'][] = $this->title; 'attribute' => 'description', 'enableSorting' => false, 'format' => 'ntext', - 'width' => '55%', + 'width' => '50%', ], [ 'class' => 'blobt\grid\ActionColumn', diff --git a/vendor/blobt/generators/crud/default/controller.php b/vendor/blobt/generators/crud/default/controller.php new file mode 100644 index 0000000..b7049e7 --- /dev/null +++ b/vendor/blobt/generators/crud/default/controller.php @@ -0,0 +1,179 @@ +controllerClass); +$modelClass = StringHelper::basename($generator->modelClass); +$searchModelClass = StringHelper::basename($generator->searchModelClass); +if ($modelClass === $searchModelClass) { + $searchModelAlias = $searchModelClass . 'Search'; +} + +/* @var $class ActiveRecordInterface */ +$class = $generator->modelClass; +$pks = $class::primaryKey(); +$urlParams = $generator->generateUrlParams(); +$actionParams = $generator->generateActionParams(); +$actionParamComments = $generator->generateActionParamComments(); + +echo " + +namespace controllerClass, '\\')) ?>; + +use Yii; +use modelClass, '\\') ?>; +searchModelClass)): ?> +use searchModelClass, '\\') . (isset($searchModelAlias) ? " as $searchModelAlias" : "") ?>; + +use yii\data\ActiveDataProvider; + +use baseControllerClass, '\\') ?>; +use yii\web\NotFoundHttpException; +use yii\filters\VerbFilter; + +/** + * implements the CRUD actions for model. + */ +class extends baseControllerClass) . "\n" ?> +{ + /** + * {@inheritdoc} + */ + public function behaviors() + { + return [ + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all models. + * @return mixed + */ + public function actionIndex() + { +searchModelClass)): ?> + $searchModel = new (); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + + $dataProvider = new ActiveDataProvider([ + 'query' => ::find(), + ]); + + return $this->render('index', [ + 'dataProvider' => $dataProvider, + ]); + + } + + /** + * Displays a single model. + * + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionView() + { + return $this->render('view', [ + 'model' => $this->findModel(), + ]); + } + + /** + * Creates a new model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new (); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', ]); + } + + return $this->render('create', [ + 'model' => $model, + ]); + } + + /** + * Updates an existing model. + * If update is successful, the browser will be redirected to the 'view' page. + * + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionUpdate() + { + $model = $this->findModel(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', ]); + } + + return $this->render('update', [ + 'model' => $model, + ]); + } + + /** + * Deletes an existing model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionDelete() + { + $this->findModel()->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * + * @return the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel() + { + \$$pk"; + } + $condition = '[' . implode(', ', $condition) . ']'; +} +?> + if (($model = ::findOne()) !== null) { + return $model; + } + + throw new NotFoundHttpException(generateString('The requested page does not exist.') ?>); + } +} diff --git a/vendor/blobt/generators/crud/default/search.php b/vendor/blobt/generators/crud/default/search.php new file mode 100644 index 0000000..0ca91d4 --- /dev/null +++ b/vendor/blobt/generators/crud/default/search.php @@ -0,0 +1,86 @@ +modelClass); +$searchModelClass = StringHelper::basename($generator->searchModelClass); +if ($modelClass === $searchModelClass) { + $modelAlias = $modelClass . 'Model'; +} +$rules = $generator->generateSearchRules(); +$labels = $generator->generateSearchLabels(); +$searchAttributes = $generator->getSearchAttributes(); +$searchConditions = $generator->generateSearchConditions(); + +echo " + +namespace searchModelClass, '\\')) ?>; + +use yii\base\Model; +use yii\data\ActiveDataProvider; +use modelClass, '\\') . (isset($modelAlias) ? " as $modelAlias" : "") ?>; + +/** + * represents the model behind the search form of `modelClass ?>`. + */ +class extends + +{ + /** + * {@inheritdoc} + */ + public function rules() + { + return [ + , + ]; + } + + /** + * {@inheritdoc} + */ + public function scenarios() + { + // bypass scenarios() implementation in the parent class + return Model::scenarios(); + } + + /** + * Creates data provider instance with search query applied + * + * @param array $params + * + * @return ActiveDataProvider + */ + public function search($params) + { + $query = ::find(); + + // add conditions that should always apply here + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + + + return $dataProvider; + } +} diff --git a/vendor/blobt/generators/crud/default/views/_form.php b/vendor/blobt/generators/crud/default/views/_form.php new file mode 100644 index 0000000..0720887 --- /dev/null +++ b/vendor/blobt/generators/crud/default/views/_form.php @@ -0,0 +1,42 @@ +modelClass(); +$safeAttributes = $model->safeAttributes(); +if (empty($safeAttributes)) { + $safeAttributes = $model->attributes(); +} + +echo " + +use yii\helpers\Html; +use yii\widgets\ActiveForm; + +/* @var $this yii\web\View */ +/* @var $model modelClass, '\\') ?> */ +/* @var $form yii\widgets\ActiveForm */ +?> + +
+ + $form = ActiveForm::begin(); ?> + +getColumnNames() as $attribute) { + if (in_array($attribute, $safeAttributes)) { + echo " generateActiveField($attribute) . " ?>\n\n"; + } +} ?> +
+ Html::submitButton(generateString('Save') ?>, ['class' => 'btn btn-success']) ?> +
+ + ActiveForm::end(); ?> + +
diff --git a/vendor/blobt/generators/crud/default/views/_search.php b/vendor/blobt/generators/crud/default/views/_search.php new file mode 100644 index 0000000..b65231f --- /dev/null +++ b/vendor/blobt/generators/crud/default/views/_search.php @@ -0,0 +1,49 @@ + + +use yii\helpers\Html; +use yii\widgets\ActiveForm; + +/* @var $this yii\web\View */ +/* @var $model searchModelClass, '\\') ?> */ +/* @var $form yii\widgets\ActiveForm */ +?> + + diff --git a/vendor/blobt/generators/crud/default/views/create.php b/vendor/blobt/generators/crud/default/views/create.php new file mode 100644 index 0000000..819bb3a --- /dev/null +++ b/vendor/blobt/generators/crud/default/views/create.php @@ -0,0 +1,29 @@ + + +use yii\helpers\Html; + +/* @var $this yii\web\View */ +/* @var $model modelClass, '\\') ?> */ + +$this->title = generateString('Create ' . Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>; +$this->params['breadcrumbs'][] = ['label' => generateString(Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass)))) ?>, 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

Html::encode($this->title) ?>

+ + $this->render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/vendor/blobt/generators/crud/default/views/index.php b/vendor/blobt/generators/crud/default/views/index.php new file mode 100644 index 0000000..066274a --- /dev/null +++ b/vendor/blobt/generators/crud/default/views/index.php @@ -0,0 +1,105 @@ +generateUrlParams(); +$nameAttribute = $generator->getNameAttribute(); + +echo " + +use yii\helpers\Html; +use blobt\grid\GridView; + +/* @var $this yii\web\View */ +searchModelClass) ? "/* @var \$searchModel " . ltrim($generator->searchModelClass, '\\') . " */\n" : '' ?> +/* @var $dataProvider yii\data\ActiveDataProvider */ + +$this->title = generateString(Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass)))) ?>; +$this->params['breadcrumbs'][] = $this->title; +?> + +
+
+ + GridView::widget([ + 'dataProvider' => $dataProvider, + 'filter' => $this->render("_search", ['model' => $searchModel]), + batch' => [ + [ + "label" => "删除", + "url" => "/category/deletes" + ], + ], + 'columns' => [ + + ], + ]); + " ?> +
+
+ + + +
+ +

Html::encode($this->title) ?>

+ +

+Html::a(generateString('Create ' . Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>, ['create'], ['class' => 'btn btn-success']) ?> +

+ + enablePjax ? " \n" : '' ?> + searchModelClass)): ?> + indexWidgetType === 'grid' ? "// " : "") ?>echo $this->render('_search', ['model' => $searchModel]); ?> + + + indexWidgetType === 'grid'): ?> + GridView::widget([ + 'dataProvider' => $dataProvider, + searchModelClass) ? "'filterModel' => \$searchModel,\n 'columns' => [\n" : "'columns' => [\n"; ?> + ['class' => 'yii\grid\SerialColumn'], + + getTableSchema()) === false) { + foreach ($generator->getColumnNames() as $name) { + if (++$count < 6) { + echo " '" . $name . "',\n"; + } else { + echo " //'" . $name . "',\n"; + } + } + } else { + foreach ($tableSchema->columns as $column) { + $format = $generator->generateColumnFormat($column); + if (++$count < 6) { + echo " '" . $column->name . ($format === 'text' ? "" : ":" . $format) . "',\n"; + } else { + echo " //'" . $column->name . ($format === 'text' ? "" : ":" . $format) . "',\n"; + } + } + } + ?> + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> + + ListView::widget([ + 'dataProvider' => $dataProvider, + 'itemOptions' => ['class' => 'item'], + 'itemView' => function ($model, $key, $index, $widget) { + return Html::a(Html::encode($model->), ['view', ]); + }, + ]) ?> + + +enablePjax ? " \n" : '' ?> + +
diff --git a/vendor/blobt/generators/crud/default/views/update.php b/vendor/blobt/generators/crud/default/views/update.php new file mode 100644 index 0000000..31af000 --- /dev/null +++ b/vendor/blobt/generators/crud/default/views/update.php @@ -0,0 +1,40 @@ +generateUrlParams(); +$modelClassName = Inflector::camel2words(StringHelper::basename($generator->modelClass)); +$nameAttributeTemplate = '$model->' . $generator->getNameAttribute(); +$titleTemplate = $generator->generateString('Update ' . $modelClassName . ': {name}', ['name' => '{nameAttribute}']); +if ($generator->enableI18N) { + $title = strtr($titleTemplate, ['\'{nameAttribute}\'' => $nameAttributeTemplate]); +} else { + $title = strtr($titleTemplate, ['{nameAttribute}\'' => '\' . ' . $nameAttributeTemplate]); +} + +echo " + +use yii\helpers\Html; + +/* @var $this yii\web\View */ +/* @var $model modelClass, '\\') ?> */ + +$this->title = ; +$this->params['breadcrumbs'][] = ['label' => generateString(Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass)))) ?>, 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->getNameAttribute() ?>, 'url' => ['view', ]]; +$this->params['breadcrumbs'][] = generateString('Update') ?>; +?> +
+ +

Html::encode($this->title) ?>

+ + $this->render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/vendor/blobt/generators/crud/default/views/view.php b/vendor/blobt/generators/crud/default/views/view.php new file mode 100644 index 0000000..ec6d8d2 --- /dev/null +++ b/vendor/blobt/generators/crud/default/views/view.php @@ -0,0 +1,58 @@ +generateUrlParams(); + +echo " + +use yii\helpers\Html; +use yii\widgets\DetailView; + +/* @var $this yii\web\View */ +/* @var $model modelClass, '\\') ?> */ + +$this->title = $model->getNameAttribute() ?>; +$this->params['breadcrumbs'][] = ['label' => generateString(Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass)))) ?>, 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +\yii\web\YiiAsset::register($this); +?> +
+ +

Html::encode($this->title) ?>

+ +

+ Html::a(generateString('Update') ?>, ['update', ], ['class' => 'btn btn-primary']) ?> + Html::a(generateString('Delete') ?>, ['delete', ], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => generateString('Are you sure you want to delete this item?') ?>, + 'method' => 'post', + ], + ]) ?> +

+ + DetailView::widget([ + 'model' => $model, + 'attributes' => [ +getTableSchema()) === false) { + foreach ($generator->getColumnNames() as $name) { + echo " '" . $name . "',\n"; + } +} else { + foreach ($generator->getTableSchema()->columns as $column) { + $format = $generator->generateColumnFormat($column); + echo " '" . $column->name . ($format === 'text' ? "" : ":" . $format) . "',\n"; + } +} +?> + ], + ]) ?> + +