MenuSearch.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2016-11-28 09:29
  7. */
  8. namespace backend\models\search;
  9. use backend\behaviors\TimeSearchBehavior;
  10. use common\models\Menu;
  11. use yii\data\ArrayDataProvider;
  12. class MenuSearch extends Menu implements SearchInterface
  13. {
  14. public function attributes()
  15. {
  16. return [
  17. "name", "url", "sort", "target", "is_display", "is_absolute_url"
  18. ];
  19. }
  20. /**
  21. * @inheritdoc
  22. */
  23. public function rules()
  24. {
  25. return [
  26. [['name', 'url', "target"], 'string'],
  27. [['sort', 'is_display', "is_absolute_url"], 'integer'],
  28. ];
  29. }
  30. public function behaviors()
  31. {
  32. return [
  33. TimeSearchBehavior::className()
  34. ];
  35. }
  36. public function search(array $params = [], array $options = [])
  37. {
  38. $menus = $options['dataSource'];
  39. if( !$this->load($params) ) {
  40. return new ArrayDataProvider([
  41. 'allModels' => $menus,
  42. 'pagination' => [
  43. 'pageSize' => -1,
  44. ],
  45. ]);
  46. }
  47. $classNameArray = explode('\\', self::className());
  48. $className = end($classNameArray);
  49. if (isset($params[$className])) {
  50. $searchParams = $params[$className];
  51. foreach ($searchParams as $searchParamKey => $searchParamValue) {
  52. if ($searchParamValue !== '') {
  53. foreach ($menus as $key => $menu) {
  54. if (in_array($searchParamKey, ['sort'])) {
  55. if ($menu[$searchParamKey] != $searchParamValue) {
  56. unset($menus[$key]);
  57. }
  58. } else {
  59. if (strpos($menu[$searchParamKey], $searchParamValue) === false) {
  60. unset($menus[$key]);
  61. }
  62. }
  63. }
  64. }
  65. }
  66. }
  67. return new ArrayDataProvider([
  68. 'allModels' => $menus,
  69. 'pagination' => [
  70. 'pageSize' => -1,
  71. ],
  72. ]);
  73. }
  74. }