Sometimes you need to create a controller which doesn’t cover all seven resourceful methods such as index(), create(), store() and more. You just need controller which does one thing and you’re struggling how to name that method. No more struggle because there’s __invoke() method.

You can create a Controller with only one method __invoke():

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class ProfileController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
    public function __invoke($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

As you can see, you can also pass a parameter to id.

To call that method+Controller in your routes/web.php you should have this:

Route::get('user/{id}', 'ProfileController');

You can also generate this kind of Controller with this Artisan command:

php artisan make:controller ProfileController --invokable

Credit to: https://bit.ly/3I9bxH8