Привязать метод к другому методу в php - PullRequest
0 голосов
/ 08 сентября 2018

Это, наверное, что-то, что кто-то знает, кроме меня, я даже не знаю, что искать, кроме этого в заголовке.

Как laravel и т. Д. Использует промежуточное программное обеспечение метода в __construct, чтобы вызывать его только для определенных методов в этом классе?

public function __construct() {
  $this->middleware('auth')->only(['index']);
}

public function index() {
  //Do something as auth..
}

public function show() {
  //Do something without auth..
}

Я сделал класс Auth:

class Auth
{
  public static function user() {
    //Check is user logged in and redirect if not
  }
}

В основной класс контроллеров я добавил метод:

public function middleware($who) {
  Auth::$who();
}

public function only(array $methods) {
  //Use middleware on using these methods
}

Теперь вот где я глуп:

Когда я звоню, скажем:

$this->middleware('user');

Внутри какого-то метода он работает как положено.

Но когда я использую это в __constructor, он запускается на всех методах, которые я вызываю, как я могу проверить, какие методы должны использовать этот метод промежуточного программного обеспечения из конструктора?

1 Ответ

0 голосов
/ 08 сентября 2018

Быстрая проверка на источник laravel, и вы получите ответ.

Вы можете сделать эту магию в контроллере laravel $this->middleware('auth')->only(['index']); потому что каждый контроллер должен расширять абстрактный контроллер, предоставляемый laravel. А у абстрактного контроллера есть метод с именем middleware, этот метод добавляет информацию о том, какое промежуточное программное обеспечение следует вызывать для конкретного метода / маршрута.

Если вы проверите промежуточные войны из laravel, вы найдете другой ответ, как промежуточные войны проверяют, как они могут получать и уважать эту информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...