📖 Scenario: You are creating a simple Laravel web app that shows a welcome message on the homepage. Instead of a full controller with many methods, you will use a single action controller to keep things clean and focused.
🎯 Goal: Build a single action controller in Laravel that returns a welcome view when the homepage is visited.
📋 What You'll Learn
Create a single action controller class named WelcomeController
Add an __invoke method that returns the welcome view
Register a route for the homepage / that uses the WelcomeController
Ensure the route uses the controller as a callable
💡 Why This Matters
🌍 Real World
Single action controllers are useful for simple pages or API endpoints where only one action is needed, making your code cleaner and easier to maintain.
💼 Career
Understanding single action controllers helps you write efficient Laravel applications and is a common pattern in professional Laravel development.
Progress0 / 4 steps
1
Create the Single Action Controller Class
Create a PHP class named WelcomeController inside the app/Http/Controllers directory. The class should be empty for now.
Laravel
Hint
Use the php artisan make:controller WelcomeController --invokable command to generate this automatically, or create the file manually.
2
Add the __invoke Method
Inside the WelcomeController class, add a public method named __invoke that returns the view named welcome using return view('welcome');.
Laravel
Hint
The __invoke method allows the controller to be called as a single action.
3
Register the Route for the Homepage
In the routes/web.php file, add a route for the homepage path '/' that uses the WelcomeController as a callable by passing the class name as a string to Route::get.
Laravel
Hint
Use the controller class name directly in the route to use the single action controller.
4
Complete the Setup and Test
Ensure the welcome.blade.php view file exists in the resources/views directory. The route and controller are now connected to show the welcome page when visiting /.
Laravel
Hint
Laravel includes a default welcome.blade.php view when you create a new project.
Practice
(1/5)
1. What is the main purpose of a single action controller in Laravel?
easy
A. To replace middleware functionality
B. To manage multiple actions in one controller
C. To handle exactly one action using the __invoke method
D. To handle database migrations
Solution
Step 1: Understand the role of single action controllers
Single action controllers are designed to handle only one action, making code simpler and focused.
Step 2: Identify the method used
They use the special __invoke method to handle that single action.
Final Answer:
To handle exactly one action using the __invoke method -> Option C
Quick Check:
Single action controller = __invoke method [OK]
Hint: Single action controllers always use __invoke method [OK]
Common Mistakes:
Thinking they handle multiple actions
Confusing with middleware or migrations
Assuming they require multiple methods
2. Which of the following is the correct syntax to define a single action controller in Laravel?
easy
A. class MyController { public function __invoke() {} }
B. class MyController { public function handle() {} }
C. class MyController { public function index() {} }
D. class MyController { public function action() {} }
Solution
Step 1: Recall the special method for single action controllers
Single action controllers use the __invoke() method to handle the action.
Step 2: Match the syntax
The correct syntax defines a class with a public function __invoke() method.
Final Answer:
class MyController { public function __invoke() {} } -> Option A
Quick Check:
__invoke method syntax = class MyController { public function __invoke() {} } [OK]
Hint: Look for __invoke method in the class [OK]
Common Mistakes:
Using index() or handle() instead of __invoke()
Forgetting the public visibility
Confusing method names with other controller types
3. Given this single action controller code, what will be the output when accessed?
class WelcomeController {
public function __invoke() {
return 'Hello, Laravel!';
}
}
medium
A. Hello, Laravel!
B. Error: Method not found
C. Empty response
D. 404 Not Found
Solution
Step 1: Understand __invoke method behavior
The __invoke method runs when the controller is called as a single action, returning the string 'Hello, Laravel!'.
Step 2: Predict the output
Since the method returns a string, the response will be that string displayed.
Final Answer:
Hello, Laravel! -> Option A
Quick Check:
__invoke returns string = 'Hello, Laravel!' [OK]
Hint: __invoke returns output directly as response [OK]
Common Mistakes:
Expecting an error due to missing method name
Thinking it returns empty or 404
Confusing with multi-method controllers
4. Identify the error in this single action controller code:
class TestController {
public function invoke() {
return 'Test';
}
}
medium
A. Return statement is invalid
B. Method should be private, not public
C. Class name must be TestActionController
D. Missing __invoke method name with double underscores
Solution
Step 1: Check method name for single action controller
The method must be named __invoke with two underscores, not invoke.
Step 2: Verify method visibility and return
Method should be public and return a value, which is correct here.
Final Answer:
Missing __invoke method name with double underscores -> Option D
Quick Check:
Method name must be __invoke [OK]
Hint: Method must be named __invoke with double underscores [OK]
Common Mistakes:
Using invoke instead of __invoke
Changing method visibility incorrectly
Assuming class name affects single action controller
5. You want to create a single action controller that returns a JSON response with a message 'Success'. Which code snippet correctly implements this?
hard
A. class JsonResponseController {
public function __invoke() {
return json_encode(['message' => 'Success']);
}
}
B. class JsonResponseController {
public function __invoke() {
return response()->json(['message' => 'Success']);
}
}
C. class JsonResponseController {
private function __invoke() {
return ['message' => 'Success'];
}
}
D. class JsonResponseController {
public function handle() {
return json(['message' => 'Success']);
}
}
Solution
Step 1: Use __invoke method for single action controller
The controller must have a public __invoke() method to be a single action controller.
Step 2: Return a proper JSON response in Laravel
Use Laravel's response()->json() helper to return a JSON response correctly.
Final Answer:
class JsonResponseController {
public function __invoke() {
return response()->json(['message' => 'Success']);
}
} -> Option B
Quick Check:
__invoke + response()->json() = class JsonResponseController {
public function __invoke() {
return response()->json(['message' => 'Success']);
}
} [OK]
Hint: Use response()->json() inside __invoke method [OK]
Common Mistakes:
Using handle() instead of __invoke()
Returning raw arrays without response helper
Using json() function which doesn't exist in Laravel
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.