PHP'de __invoke() şeklinde bir sihirli yöntem var (
https://www.php.net/manual/tr/language.oop5.magic.php). Bir sınıfı fonksiyon olarak çağırdığınızda bu yöntem varsa ateşlenir. Örneğin:
class Mesaj {
public function __invoke()
{
echo "Merhaba Dünya";
}
}
$mesaj = new Mesaj;
$mesaj(); // Ekrana Merhaba Dünya basar
Laravel'de invokable controller ile kastedilen, eğer bir controller sadece bir yöntem içeriyorsa __invoke kullanılarak şu şekilde kullanılabilir:
class HomeController extends Controller
{
public function __invoke()
{
return view('home');
}
}
Route::get('/','HomeController');
Invokable olmasaydı şöyle olurdu mesela:
class HomeController extends Controller
{
public function index()
{
return view('home');
}
}
Route::get('/', 'HomeController@index');
// ya da
Route::get('/')->uses('HomeController@index');
// ya da hiç controller kullanmadan direk view çağırma (bu ekstra, üstteki ile ilgili değil, yeri gelmişken yazayım dedim)
Route::view('/', 'home');