<?php use yii\helpers\StringHelper; /** * This is the template for generating a CRUD controller class file. * * @var yii\web\View $this * @var yii\gii\generators\crud\Generator $generator */ $modelClass = StringHelper::basename($generator->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 "<?php\n"; ?> namespace <?= StringHelper::dirname(ltrim($generator->searchModelClass, '\\')) ?>; use yii\base\Model; use yii\data\ActiveDataProvider; use <?= ltrim($generator->modelClass, '\\') . (isset($modelAlias) ? " as $modelAlias" : "") ?>; /** * <?= $searchModelClass ?> represents the model behind the search form about `<?= $generator->modelClass ?>`. */ class <?= $searchModelClass ?> extends Model { public $<?= implode(";\n public $", $searchAttributes) ?>; public function rules() { return [ <?= implode(",\n ", $rules) ?>, ]; } /** * @inheritdoc */ public function attributeLabels() { return [ <?php foreach ($labels as $name => $label): ?> <?= "'$name' => '" . addslashes($label) . "',\n" ?> <?php endforeach; ?> ]; } public function search($params) { $query = <?= isset($modelAlias) ? $modelAlias : $modelClass ?>::find(); $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } <?= implode("\n ", $searchConditions) ?> return $dataProvider; } protected function addCondition($query, $attribute, $partialMatch = false) { if (($pos = strrpos($attribute, '.')) !== false) { $modelAttribute = substr($attribute, $pos + 1); } else { $modelAttribute = $attribute; } $value = $this->$modelAttribute; if (trim($value) === '') { return; } if ($partialMatch) { $query->andWhere(['like', $attribute, $value]); } else { $query->andWhere([$attribute => $value]); } } }