search.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. use yii\helpers\StringHelper;
  3. /**
  4. * This is the template for generating CRUD search class of the specified model.
  5. *
  6. * @var yii\web\View $this
  7. * @var yii\gii\generators\crud\Generator $generator
  8. */
  9. $modelClass = StringHelper::basename($generator->modelClass);
  10. $searchModelClass = StringHelper::basename($generator->searchModelClass);
  11. if ($modelClass === $searchModelClass) {
  12. $modelAlias = $modelClass . 'Model';
  13. }
  14. $rules = $generator->generateSearchRules();
  15. $labels = $generator->generateSearchLabels();
  16. $searchAttributes = $generator->getSearchAttributes();
  17. $searchConditions = $generator->generateSearchConditions();
  18. echo "<?php\n";
  19. ?>
  20. namespace <?= StringHelper::dirname(ltrim($generator->searchModelClass, '\\')) ?>;
  21. use Yii;
  22. use yii\base\Model;
  23. use yii\data\ActiveDataProvider;
  24. use <?= ltrim($generator->modelClass, '\\') . (isset($modelAlias) ? " as $modelAlias" : "") ?>;
  25. /**
  26. * <?= $searchModelClass ?> represents the model behind the search form about `<?= $generator->modelClass ?>`.
  27. */
  28. class <?= $searchModelClass ?> extends <?= isset($modelAlias) ? $modelAlias : $modelClass ?>
  29. {
  30. public function rules()
  31. {
  32. return [
  33. <?= implode(",\n ", $rules) ?>,
  34. ];
  35. }
  36. public function scenarios()
  37. {
  38. // bypass scenarios() implementation in the parent class
  39. return Model::scenarios();
  40. }
  41. public function search($params)
  42. {
  43. $query = <?= isset($modelAlias) ? $modelAlias : $modelClass ?>::find();
  44. $dataProvider = new ActiveDataProvider([
  45. 'query' => $query,
  46. ]);
  47. if (!($this->load($params) && $this->validate())) {
  48. return $dataProvider;
  49. }
  50. <?= implode("\n ", $searchConditions) ?>
  51. return $dataProvider;
  52. }
  53. }