mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-14 21:30:17 +08:00
Merge branch '2018-fix-gii-crud' of github.com:johonunu/yii2 into johonunu-2018-fix-gii-crud
This commit is contained in:
@@ -27,6 +27,7 @@ Yii Framework 2 gii extension Change Log
|
||||
- Enh #2633: Keyboard shortcuts to browse through files (thiagotalma)
|
||||
- Enh #2822: possibility to generate I18N messages (lucianobaraglia)
|
||||
- Enh #2843: Option to filter files according to the action. (thiagotalma)
|
||||
- Enh #2018: Search model not required anymore in crud generator. (johonunu)
|
||||
|
||||
2.0.0-alpha, December 1, 2013
|
||||
-----------------------------
|
||||
|
||||
@@ -35,7 +35,7 @@ class Generator extends \yii\gii\Generator
|
||||
public $controllerClass;
|
||||
public $baseControllerClass = 'yii\web\Controller';
|
||||
public $indexWidgetType = 'grid';
|
||||
public $searchModelClass;
|
||||
public $searchModelClass = '';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
@@ -61,7 +61,7 @@ class Generator extends \yii\gii\Generator
|
||||
{
|
||||
return array_merge(parent::rules(), [
|
||||
[['moduleID', 'controllerClass', 'modelClass', 'searchModelClass', 'baseControllerClass'], 'filter', 'filter' => 'trim'],
|
||||
[['modelClass', 'searchModelClass', 'controllerClass', 'baseControllerClass', 'indexWidgetType'], 'required'],
|
||||
[['modelClass', 'controllerClass', 'baseControllerClass', 'indexWidgetType'], 'required'],
|
||||
[['searchModelClass'], 'compare', 'compareAttribute' => 'modelClass', 'operator' => '!==', 'message' => 'Search Model Class must not be equal to Model Class.'],
|
||||
[['modelClass', 'controllerClass', 'baseControllerClass', 'searchModelClass'], 'match', 'pattern' => '/^[\w\\\\]*$/', 'message' => 'Only word characters and backslashes are allowed.'],
|
||||
[['modelClass'], 'validateClass', 'params' => ['extends' => BaseActiveRecord::className()]],
|
||||
@@ -162,15 +162,22 @@ class Generator extends \yii\gii\Generator
|
||||
public function generate()
|
||||
{
|
||||
$controllerFile = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->controllerClass, '\\')) . '.php');
|
||||
$searchModel = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->searchModelClass, '\\') . '.php'));
|
||||
|
||||
$files = [
|
||||
new CodeFile($controllerFile, $this->render('controller.php')),
|
||||
new CodeFile($searchModel, $this->render('search.php')),
|
||||
];
|
||||
|
||||
if (!empty($this->searchModelClass)) {
|
||||
$searchModel = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->searchModelClass, '\\') . '.php'));
|
||||
$files[] = new CodeFile($searchModel, $this->render('search.php'));
|
||||
}
|
||||
|
||||
$viewPath = $this->getViewPath();
|
||||
$templatePath = $this->getTemplatePath() . '/views';
|
||||
foreach (scandir($templatePath) as $file) {
|
||||
if (empty($this->searchModelClass) && $file === '_search.php') {
|
||||
continue;
|
||||
}
|
||||
if (is_file($templatePath . '/' . $file) && pathinfo($file, PATHINFO_EXTENSION) === 'php') {
|
||||
$files[] = new CodeFile("$viewPath/$file", $this->render("views/$file"));
|
||||
}
|
||||
|
||||
@@ -31,7 +31,11 @@ namespace <?= StringHelper::dirname(ltrim($generator->controllerClass, '\\')) ?>
|
||||
|
||||
use Yii;
|
||||
use <?= ltrim($generator->modelClass, '\\') ?>;
|
||||
<?php if (!empty($generator->searchModelClass)): ?>
|
||||
use <?= ltrim($generator->searchModelClass, '\\') . (isset($searchModelAlias) ? " as $searchModelAlias" : "") ?>;
|
||||
<?php else: ?>
|
||||
use yii\data\ActiveDataProvider;
|
||||
<?php endif; ?>
|
||||
use <?= ltrim($generator->baseControllerClass, '\\') ?>;
|
||||
use yii\web\NotFoundHttpException;
|
||||
use yii\filters\VerbFilter;
|
||||
@@ -59,6 +63,7 @@ class <?= $controllerClass ?> extends <?= StringHelper::basename($generator->bas
|
||||
*/
|
||||
public function actionIndex()
|
||||
{
|
||||
<?php if (!empty($generator->searchModelClass)): ?>
|
||||
$searchModel = new <?= isset($searchModelAlias) ? $searchModelAlias : $searchModelClass ?>;
|
||||
$dataProvider = $searchModel->search(Yii::$app->request->getQueryParams());
|
||||
|
||||
@@ -66,6 +71,15 @@ class <?= $controllerClass ?> extends <?= StringHelper::basename($generator->bas
|
||||
'dataProvider' => $dataProvider,
|
||||
'searchModel' => $searchModel,
|
||||
]);
|
||||
<?php else: ?>
|
||||
$dataProvider = new ActiveDataProvider([
|
||||
'query' => <?= $modelClass ?>::find(),
|
||||
]);
|
||||
|
||||
return $this->render('index', [
|
||||
'dataProvider' => $dataProvider,
|
||||
]);
|
||||
<?php endif; ?>
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,7 +20,7 @@ use <?= $generator->indexWidgetType === 'grid' ? "yii\\grid\\GridView" : "yii\\w
|
||||
/**
|
||||
* @var yii\web\View $this
|
||||
* @var yii\data\ActiveDataProvider $dataProvider
|
||||
* @var <?= ltrim($generator->searchModelClass, '\\') ?> $searchModel
|
||||
<?= !empty($generator->searchModelClass) ? " * @var " . ltrim($generator->searchModelClass, '\\') . " \$searchModel\n" : '' ?>
|
||||
*/
|
||||
|
||||
$this->title = <?= $generator->generateString(Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass)))) ?>;
|
||||
@@ -29,8 +29,9 @@ $this->params['breadcrumbs'][] = $this->title;
|
||||
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-index">
|
||||
|
||||
<h1><?= "<?= " ?>Html::encode($this->title) ?></h1>
|
||||
|
||||
<?= "<?php " . ($generator->indexWidgetType === 'grid' ? "// " : "") ?>echo $this->render('_search', ['model' => $searchModel]); ?>
|
||||
<?php if(!empty($generator->searchModelClass)): ?>
|
||||
<?= " <?php " . ($generator->indexWidgetType === 'grid' ? "// " : "") ?>echo $this->render('_search', ['model' => $searchModel]); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<p>
|
||||
<?= "<?= " ?>Html::a(<?= $generator->generateString('Create {modelClass}', ['modelClass' => Inflector::camel2words(StringHelper::basename($generator->modelClass))]) ?>, ['create'], ['class' => 'btn btn-success']) ?>
|
||||
@@ -39,8 +40,7 @@ $this->params['breadcrumbs'][] = $this->title;
|
||||
<?php if ($generator->indexWidgetType === 'grid'): ?>
|
||||
<?= "<?= " ?>GridView::widget([
|
||||
'dataProvider' => $dataProvider,
|
||||
'filterModel' => $searchModel,
|
||||
'columns' => [
|
||||
<?= !empty($generator->searchModelClass) ? "'filterModel' => \$searchModel,\n 'columns' => [\n" : "'columns' => [\n"; ?>
|
||||
['class' => 'yii\grid\SerialColumn'],
|
||||
|
||||
<?php
|
||||
|
||||
Reference in New Issue
Block a user