###### tags: `laravel` # Setup environment for production (system: ubuntu 20.04 ) ### apache install ``` sudo apt install apache2 sudo ufw allow “Apache Full” ``` ### php install ``` sudo apt install php libapache2-mod-php php-mbstring php-xmlrpc php-soap php-gd php-xml php-cli php-zip php-bcmath php-tokenizer php-json php-pear ``` ### composer install ``` curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer sudo chmod +x /usr/local/bin/composer ``` ### create Laravel project `composer create-project --prefer-dist laravel/laravel app` ### Run on localhost ``` php -S localhost:8000 -t public/ ``` ![](https://i.imgur.com/YFOt8KR.png) ### IDE setup (Visual Studio Code) open folder /var/www/html/app ![](https://i.imgur.com/x3z451c.png) # First page setup create php files for about and home ``` touch /views/pages/about.blade.php home.bldade.php index.bladade.php ``` create routes for home and about (In routes/web.php ) ``` Route::get('/home', function () { return view('pages.home'); }); Route::get('/about', function () { return view('pages.about'); }); // Testing dynamic route Route::get('/users/{id}/{name}', function ($id,$name) { return 'User : '.$name.' ID: '.$id; }); ``` create controller `php artisan make:controller PageController` ![](https://i.imgur.com/9TUhZPC.png) inside PageController.php ``` <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PageController extends Controller { public function index(){ return view('pages.index'); } } ``` add content in index.blade.php ``` <!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Praetorian Power Protection LLC</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> </head> <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">Welcome</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav mr-auto"> <li class="nav-item active"> <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a> </li> <li class="nav-item"> <a class="nav-link" href="#">About</a> </li> </ul> <form class="form-inline my-2 my-lg-0"> <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search"> <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> </form> </div> </nav> <div class="jumbotron"> <h1 class="display-4">Home page!</h1> <p class="lead">...</p> <hr class="my-4"> <p>uncompleted.</p> </div> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html> ``` ### Result ![](https://i.imgur.com/B8dZ6ks.png) # Multiple pages setup with controller for separate logic inside web.app ``` Route::get('/', [App\Http\Controllers\PageController::class, 'index']); Route::get('/about', [App\Http\Controllers\PageController::class, 'about']); Route::get('/services', [App\Http\Controllers\PageController::class, 'services']); Route::get('/contact', [App\Http\Controllers\PageController::class, 'contact']); ``` insdde PageCOntroller.php ``` class PageController extends Controller { public function index(){ return view('pages.index'); } public function about(){ return view('pages.about'); } public function services(){ return view('pages.services'); } public function contact(){ return view('pages.contact'); } } ``` ## Use template inheritance for reusability ![](https://i.imgur.com/tDDs3n4.png) inside app.blade.php (base template) ``` <!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Praetorian Power Protection LLC</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> </head> <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">Welcome</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav mr-auto"> <li class="nav-item active"> <a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a> </li> <li class="nav-item"> <a class="nav-link" href="/about">About</a> </li> <li class="nav-item"> <a class="nav-link" href="/services">Services</a> </li> <li class="nav-item"> <a class="nav-link" href="/contact">Contact</a> </li> </ul> <form class="form-inline my-2 my-lg-0"> <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search"> <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> </form> </div> </nav> @yield('content') <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html> ``` ### Result (Home , About , Service , Contact) ![](https://i.imgur.com/YNliF4W.png) ![](https://i.imgur.com/sLyouP3.png) ![](https://i.imgur.com/dUcmUXg.png) ![](https://i.imgur.com/4Uk3Xat.png)