Статические свойства в классе модели Laravel - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь создать стандартный метод index () для большинства моих контроллеров, который объединяет поиск, разбивку на страницы и сортировку в одном, чтобы получить все функции списков.Я использую черту для тех контроллеров, которая содержит метод индекса, и этот метод использует некоторые статические свойства, определенные в связанной модели, чтобы узнать, какие столбцы искать, и так далее.Например, мой User.php содержит:

   /**
     * @var array
     */
    public static $searchableColumns = [
        'name',
        'username',
        'title',
        'email'
    ];

    /**
     * @var array
     */
    public static $searchableRelations = [
        'groups' => ['searchOn' => 'name']
    ];

    /**
     * @var string
     */
    public static $defaultOrderBy = 'name';

Моя проблема в том, что ... это просто не правильно.Любое другое свойство в классе является переменной защищенного экземпляра, например: 1004 *

protected $fillable = [
        'username',
        'email',
        ...
];

Является ли объявление статических свойств в модели плохой практикой?Если так, где я должен определить что-то вроде этого?

1 Ответ

1 голос
/ 17 мая 2019

Вы могли бы рассмотреть возможность введения интерфейса вместо статических свойств.

interface SearchableModel {

  public static function searchableColumns(): array;

  public static function searchableRelations(): array;

  public static function defaultOrderBy(): string;
}

И реализовать его следующим образом:

class User implements SearchableModel {

  public static function searchableColumns(): array {
    return [
      'name',
      'username',
      'title',
      'email'
    ];
  }

  public static function searchableRelations(): array {
    return [
      'groups' => ['searchOn' => 'name']
    ];
  }

  public static function defaultOrderBy(): string {
    return 'name';
  }
}

Это решение выглядит аналогично вашему подходу, но выглядит немного чищемое мнение.

...