📖 Scenario: You are building a simple Laravel web app to manage a list of books. You want to organize your code using the MVC (Model-View-Controller) pattern. This helps keep your code clean and easy to maintain.
🎯 Goal: Create a Laravel MVC structure where you define a Book model, a BookController controller, and a view to display all books.
📋 What You'll Learn
Create a Book model with a title and author property
Create a BookController with an index method to get all books
Create a Blade view file books/index.blade.php to show the list of books
Set up a route to connect the URL /books to the index method of BookController
💡 Why This Matters
🌍 Real World
Organizing web app code with MVC helps developers build clean, maintainable, and scalable applications.
💼 Career
Understanding Laravel MVC is essential for backend web development roles using PHP and Laravel framework.
Progress0 / 4 steps
1
Create the Book model
Create a Laravel model called Book with the properties title and author as fillable fields.
Laravel
Hint
Use the protected $fillable property to list 'title' and 'author'.
2
Create the BookController with index method
Create a Laravel controller called BookController with a public method index that retrieves all books using Book::all() and returns the view books.index passing the books as books variable.
Laravel
Hint
Use Book::all() to get all books and return view('books.index', ['books' => $books]) to send data to the view.
3
Create the Blade view to display books
Create a Blade view file resources/views/books/index.blade.php that loops over the $books variable and displays each book's title and author inside an unordered list.
Laravel
Hint
Use Blade syntax @foreach ($books as $book) and display with {{ }}.
4
Add route for books index
In the routes/web.php file, add a route that maps the URL /books to the index method of BookController using Route::get.
Laravel
Hint
Use Route::get('/books', [BookController::class, 'index']) to define the route.
Practice
(1/5)
1. In Laravel's MVC architecture, which component is responsible for handling user input and application logic?
easy
A. Controller
B. Model
C. View
D. Route
Solution
Step 1: Understand MVC roles
Model handles data, View handles UI, Controller handles logic and user input.
Step 2: Identify the component for logic
Controller processes requests, applies logic, and returns responses.
Final Answer:
Controller -> Option A
Quick Check:
Logic and input handling = Controller [OK]
Hint: Controller = logic and input handler in MVC [OK]
Common Mistakes:
Confusing Model with Controller
Thinking View handles logic
Assuming Route handles logic
2. Which of the following is the correct way to define a route that calls the show method of UserController in Laravel?
easy
A. Route::get('/user/{id}', [UserController, 'show']);
B. Route::get('/user/{id}', 'show@UserController');
C. Route::get('/user/{id}', function() { UserController@show(); });
D. Route::get('/user/{id}', 'UserController@show');
Solution
Step 1: Recall Laravel route syntax
Routes use Route::get('uri', 'Controller@method') format for controller methods.
Step 2: Match correct syntax
Route::get('/user/{id}', 'UserController@show'); matches this pattern exactly; others have syntax errors or wrong order.
Final Answer:
Route::get('/user/{id}', 'UserController@show'); -> Option D
Hint: Variables passed to view appear as {{ $variable }} [OK]
Common Mistakes:
Expecting raw variable name output
Confusing PHP variable syntax inside Blade
Assuming missing variable error
4. Identify the error in this Laravel controller method:
public function index() {
$users = User::all;
return view('users.index', compact('users'));
}
medium
A. Missing parentheses after all() method
B. Incorrect view name syntax
C. compact() should be replaced with array()
D. User model not imported
Solution
Step 1: Check method call syntax
User::all is a method and requires parentheses: User::all() to fetch all users.
Step 2: Verify other parts
View name and compact usage are correct; import is assumed correct or handled by namespace.
Final Answer:
Missing parentheses after all() method -> Option A
Quick Check:
Method calls need () = Missing parentheses after all() method [OK]
Hint: Remember to add () when calling methods [OK]
Common Mistakes:
Forgetting parentheses on method calls
Misusing compact() function
Assuming view name syntax error
5. You want to display a list of products with their categories in a Laravel app using MVC. Which approach correctly follows MVC principles?
hard
A. Use Controller only to render HTML, fetching done in View
B. Write SQL queries directly in the View to get products and categories
C. Fetch products and categories in Controller, pass to View, and display there
D. Put all fetching and HTML rendering inside the Model
Solution
Step 1: Recall MVC responsibilities
Model handles data, Controller handles logic and data fetching, View handles display.
Step 2: Evaluate options
Fetch products and categories in Controller, pass to View, and display there correctly fetches data in Controller and passes it to View for display, following MVC.
Final Answer:
Fetch products and categories in Controller, pass to View, and display there -> Option C
Quick Check:
Controller fetches, View displays = Fetch products and categories in Controller, pass to View, and display there [OK]
Hint: Controller fetches data; View only displays it [OK]
Common Mistakes:
Putting SQL in Views
Mixing data logic in Models with display
Letting Views fetch data
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.