{"id":2058,"date":"2024-06-14T07:09:14","date_gmt":"2024-06-14T07:09:14","guid":{"rendered":"https:\/\/www.devopssupport.in\/blog\/?p=2058"},"modified":"2024-06-15T05:28:03","modified_gmt":"2024-06-15T05:28:03","slug":"mvc-model-view-controller-in-laravel-a-comprehensive-tutorial","status":"publish","type":"post","link":"https:\/\/www.devopssupport.in\/blog\/mvc-model-view-controller-in-laravel-a-comprehensive-tutorial\/","title":{"rendered":"MVC (Model-View-Controller) in Laravel A Comprehensive Tutorial"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Introduction<\/h3>\n\n\n\n<p>MVC (Model-View-Controller) is a software architectural pattern that separates an application into three main logical components: Model, View, and Controller. This separation helps in organizing code, making it more maintainable, scalable, and testable. Laravel, a popular PHP framework, follows the MVC architecture. This tutorial will guide you through implementing MVC in Laravel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"810\" height=\"508\" src=\"https:\/\/www.devopssupport.in\/blog\/wp-content\/uploads\/2024\/06\/image-7.png\" alt=\"\" class=\"wp-image-2059\" style=\"width:1123px;height:auto\" srcset=\"https:\/\/www.devopssupport.in\/blog\/wp-content\/uploads\/2024\/06\/image-7.png 810w, https:\/\/www.devopssupport.in\/blog\/wp-content\/uploads\/2024\/06\/image-7-300x188.png 300w, https:\/\/www.devopssupport.in\/blog\/wp-content\/uploads\/2024\/06\/image-7-768x482.png 768w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">MVC Components<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Model:<\/strong> Manages the data and business logic of the application.<\/li>\n\n\n\n<li><strong>View:<\/strong> Handles the presentation layer, displaying data to the user.<\/li>\n\n\n\n<li><strong>Controller:<\/strong> Processes user requests, updates the Model, and selects the View for response.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Setting Up the Environment<\/h3>\n\n\n\n<p>Ensure you have Composer and PHP installed on your machine. Then, install Laravel using Composer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>composer global require laravel\/installer<\/code><\/pre>\n\n\n\n<p>Create a new Laravel project:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>laravel new mvc_app\ncd mvc_app<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Directory Structure<\/h3>\n\n\n\n<p>Laravel&#8217;s directory structure supports the MVC pattern by default:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mvc_app\/\n\u251c\u2500\u2500 app\/\n\u2502   \u251c\u2500\u2500 Console\/\n\u2502   \u251c\u2500\u2500 Exceptions\/\n\u2502   \u251c\u2500\u2500 Http\/\n\u2502   \u2502   \u251c\u2500\u2500 Controllers\/\n\u2502   \u2502   \u251c\u2500\u2500 Middleware\/\n\u2502   \u251c\u2500\u2500 Models\/\n\u2502   \u251c\u2500\u2500 Providers\/\n\u251c\u2500\u2500 bootstrap\/\n\u251c\u2500\u2500 config\/\n\u251c\u2500\u2500 database\/\n\u251c\u2500\u2500 public\/\n\u251c\u2500\u2500 resources\/\n\u2502   \u251c\u2500\u2500 views\/\n\u251c\u2500\u2500 routes\/\n\u251c\u2500\u2500 storage\/\n\u251c\u2500\u2500 tests\/\n\u251c\u2500\u2500 vendor\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Creating a Model<\/h3>\n\n\n\n<p>Let&#8217;s create a model for our application using the built-in artisan command to generate a <code>User<\/code> model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan make:model User<\/code><\/pre>\n\n\n\n<p>This command creates a new <code>User<\/code> model in the <code>app\/Models<\/code> directory. Add methods to interact with the database in this model.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><code>app\/Models\/User.php<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass User extends Model {\n    use HasFactory;\n\n    protected $fillable = &#91;'name', 'email', 'password'];\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Creating a Controller<\/h3>\n\n\n\n<p>Next, create a controller to handle user requests using the artisan command to generate a <code>UserController<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan make:controller UserController<\/code><\/pre>\n\n\n\n<p>This command creates a new <code>UserController<\/code> in the <code>app\/Http\/Controllers<\/code> directory.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><code>app\/Http\/Controllers\/UserController.php<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\n\nclass UserController extends Controller {\n    public function index() {\n        $users = User::all();\n        return view('users.index', &#91;'users' =&gt; $users]);\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Creating a View<\/h3>\n\n\n\n<p>Next, create a view to display the list of users. Views in Laravel are stored in the <code>resources\/views<\/code> directory.<\/p>\n\n\n\n<p>Create a new directory <code>users<\/code> and a file <code>index.blade.php<\/code> within it.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><code>resources\/views\/users\/index.blade.php<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;User List&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Users&lt;\/h1&gt;\n    &lt;ul&gt;\n        @foreach ($users as $user)\n            &lt;li&gt;{{ $user-&gt;name }} ({{ $user-&gt;email }})&lt;\/li&gt;\n        @endforeach\n    &lt;\/ul&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Setting Up Routes<\/h3>\n\n\n\n<p>Define a route to access the user list in the <code>routes\/web.php<\/code> file.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><code>routes\/web.php<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nuse Illuminate\\Support\\Facades\\Route;\nuse App\\Http\\Controllers\\UserController;\n\nRoute::get('\/users', &#91;UserController::class, 'index']);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Database Setup<\/h3>\n\n\n\n<p>Ensure your database configuration is set up correctly in the <code>.env<\/code> file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=mvc_db\nDB_USERNAME=root\nDB_PASSWORD=<\/code><\/pre>\n\n\n\n<p>Run the migrations to create the users table:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan migrate<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Seeding the Database<\/h3>\n\n\n\n<p>To test our application, seed the database with some user data.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><code>database\/seeders\/UserSeeder.php<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\User;\n\nclass UserSeeder extends Seeder {\n    public function run() {\n        User::factory()-&gt;count(10)-&gt;create();\n    }\n}<\/code><\/pre>\n\n\n\n<p>Add the seeder to the <code>DatabaseSeeder<\/code>:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><code>database\/seeders\/DatabaseSeeder.php<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder {\n    public function run() {\n        $this-&gt;call(UserSeeder::class);\n    }\n}<\/code><\/pre>\n\n\n\n<p>Run the seeder:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan db:seed<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n","protected":false},"excerpt":{"rendered":"<p>Introduction MVC (Model-View-Controller) is a software architectural pattern that separates an application into three main logical components: Model, View, and Controller. This separation helps in organizing code,&#8230; <\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1612],"tags":[],"class_list":["post-2058","post","type-post","status-publish","format-standard","hentry","category-laravel-tutorial"],"_links":{"self":[{"href":"https:\/\/www.devopssupport.in\/blog\/wp-json\/wp\/v2\/posts\/2058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopssupport.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopssupport.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopssupport.in\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopssupport.in\/blog\/wp-json\/wp\/v2\/comments?post=2058"}],"version-history":[{"count":2,"href":"https:\/\/www.devopssupport.in\/blog\/wp-json\/wp\/v2\/posts\/2058\/revisions"}],"predecessor-version":[{"id":2061,"href":"https:\/\/www.devopssupport.in\/blog\/wp-json\/wp\/v2\/posts\/2058\/revisions\/2061"}],"wp:attachment":[{"href":"https:\/\/www.devopssupport.in\/blog\/wp-json\/wp\/v2\/media?parent=2058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopssupport.in\/blog\/wp-json\/wp\/v2\/categories?post=2058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopssupport.in\/blog\/wp-json\/wp\/v2\/tags?post=2058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}