invoke single class
Есть вот такой контроллер:
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
class AuthController extends Controller
{
/**
* Handle the incoming request.
*
* @return Response
*/
public function __invoke(Request $request): Response
{
return response(auth()->user());
}
}
И это буквально все, что в нем есть. Объясните, зачем так сделано, чем это лучше отдельной функции с вызовом того же юзера? Для чего invoke вообще нужен вообще? Как он используется?
Ответы (1 шт):
__invoke используется для вызова класса как функции. Это нужно для упрощения вызова, когда в классе всего лишь один метод который можно вызывать.
...чем это лучше отдельной функции с вызовом того же юзера?
Это ничем не лучше, это всего лишь позволяет в роутере не указывать конкретный метод
Route::get('user', 'AuthController');
__invoke используется для классов в которых есть только один публичный метод, чтобы упростить обращение к нему.
Так же классы, которые реализуют __invoke могут быть использованы как callback.
Например:
class Formatter {
public function __invoke(int $param)
{
return (string)$param;
}
}
array_map(new Formatter, [1, 2, 3]);
В случае обычного класса, пришлось бы указывать метод так:
array_map([new Formatter(), 'format'], [1, 2, 3]);