Laravel

= Installation =

Install Dependencies: sudo apt install php7.3 apache2 php7.3-cli php7.3-sqlite3 php-xml sudo a2enmod rewrite sudo systemctl restart apache2

Install Composer: sudo apt install composer

Creating a project named 'code': composer create-project --prefer-dist laravel/laravel hello cp .env.example .env php artisan key:generate sudo chmod -R 777 storage/

Testing output: php artisan serve --host 0.0.0.0 --port 8082

Edit hosts file: sudo nano /etc/hosts 192.168.1.35	hello.dev

Create a new apache conf file: sudo nano /etc/apache2/sites-available/laravel.conf

 ServerName hello.dev

ServerAdmin webmaster@localhost DocumentRoot /var/www/html/hello/public

 AllowOverride All 

ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined 

sudo nano /etc/apache2/ports.conf Listen 80

sudo a2ensite laravel.conf sudo service apache2 restart

The site should be available now at: http://hello.dev/

= Auth =

Enable Authentication php artisan make:auth

=Site Creation=

Routes
cd routes/ sudo nano web.php Route::get('contact', function {    return 'Hello from Aman'; });

Route::get('contact/{category}', function ($category) {   return 'Hello from '.$category. ' Aman'; });

Check resulting pages: http://192.168.1.35/hello/public/contact/ http://192.168.1.35/hello/public/contact/Test

Views
Create a new View file: cd ../resources/views/ sudo touch master.blade.php sudo nano master.blade.php

Paste below contents: <!DOCTYPE html>

   HELLO



Home

 View All <a href="">Add New</a></li> <a href="">Edit/Delete</a></li> </ul>

@yield('content')

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"> <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" >

Edit Routes for this file: cd ../../routes/ sudo nano web.php

Route::get('/home', function {    return view('home'); });

Route::get('/view', function {    return view('view'); });

Route::get('/new', function {    return view('new'); });

Route::get('/edit', function {    return view('edit'); });

Create above defined VIEW page: cd ../resources/views/ sudo touch view.blade.php sudo nano view.blade.php

Paste below contents: @extends('master')

@section('content')

VIEW all content goes here

@endsection

Similarly create HOME page: sudo nano home.blade.php @extends('master')

@section('content')

HOME all content goes here

@endsection

Similarly create NEW page: sudo nano new.blade.php @extends('master')

@section('content')

NEW all content goes here

@endsection

Similarly create EDIT page: sudo nano edit.blade.php @extends('master')

@section('content')

EDIT all content goes here

@endsection

Test above page: http://192.168.1.35/hello/public/home

Controller

 * Routes page can call URLs but this is for small applications only.
 * For industrial applications, use Controllers.

Create a Controller: sudo php artisan make:controller RecordController

Edit the above generated file: cd app/Http/Controllers/ sudo nano RecordController.php

Append below contents: class RecordController extends Controller { public function showAll {               return view('view'); }

public function showNew {               return view('new'); }

public function showEdit {               return view('edit'); } }

Update the Routes file to use above controllers: cd ../../routes/ sudo nano web.php

Append below content: Route::get('/view', 'RecordController@showAll');

Route::get('/new', 'RecordController@showNew');

Route::get('/edit', 'RecordController@showEdit');

Database

 * Easy to create & manage tables with Migrations in large environments.

Create a new DB 'hello' using phpmyadmin or below SQL Query:

create database hello; grant all privileges on hello.* to aman@localhost identified by 'pwd@123';

Update the ENV file with this information: sudo nano .env

DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=hello DB_USERNAME=aman DB_PASSWORD=pwd@123

Create a DB table using Artisan:

sudo php artisan make:migration create_records_table Created Migration: 2017_09_19_190352_create_records_table

File is created under below location: cd database/migrations/ && ls 2017_09_19_190352_create_records_table.php

Edit this file with below DB Table information: sudo nano 2017_09_19_190352_create_records_table.php public function up {       Schema::create('records', function (Blueprint $table) {            $table->increments('id');            $table->string('country');            $table->string('city');            $table->string('date');            $table->string('no_of_aliens');            $table->string('color_of_aliens');            $table->timestamps;        }); }

public function down {       Schema::dropIfExists('records'); }

Create the Tables: sudo php artisan migrate

You can confirm the Tables created in phpmyadmin.

Eloquent
Create a model named Record sudo php artisan make:model Record

cd app/ sudo nano Record.php

Add below information class Record extends Model {   protected $table='records'; protected $fillable=['id','country','city','date','no_of_aliens','color_of_aliens'];

}

To Feed test data using Seeding, create seed file:

sudo php artisan make:seeder RecordsTableSeeder

cd database/seeds/ sudo nano RecordsTableSeeder.php

Append below information: use App\Record;   //to import records.php file

class RecordsTableSeeder extends Seeder { public function run {      for ($i=0; $i<20; $i++) {          Record::create (               [                   'country' => "country$i",                   'city' => "city$i",                   'date' => "date$i",                   'no_of_aliens' => "no_of_aliens$i",                   'color_of_aliens' => "color_of_aliens$i"                ]            ); }   } }

Edit the Databse seeder file: sudo nano DatabaseSeeder.php

use App\Record;

class DatabaseSeeder extends Seeder {   public function run {       $this->call('RecordsTableSeeder'); }

}

Now seed the file with dummy data: sudo php artisan db:seed Seeding: RecordsTableSeeder

You will be able to see this dummy data in phpmyadmin now.

View DB contents
sudo nano app/Http/Controllers/RecordController.php Append below code into relevant sections: use App\Record;
 * Check all/Debug output from DB for troubleshooting:

class RecordController extends Controller { public function showAll {       //      return view('view'); dd(Record::all) ; }

Check the View page, you will find all information there http://hello.dev/view


 * Getting specific information from DB:

class RecordController extends Controller { public function showAll {               $records=Record::all; return view('view')->with('records',$records); //     dd(Record::all) ; }

sudo nano resources/views/view.blade.php @extends('master')

@section('content')

<h3 class="panel-title">All Available Aliens

@endsection

Check the View page, you will find useful information in a table here: http://hello.dev/view

Entering Data
sudo nano resources/views/new.blade.php

@extends('master')

@section('content')

<h3 class="panel-title">Report New Aliens <form role="form" method="POST" action=""> <input type="hidden" name="_token" value="">

<label class="col-md-3 control-label">Country: <input type="text" class="form-control" name='country' value=""/> <label class="col-md-3 control-label">City: <input type="text" class="form-control" name='city' value=""/> <label class="col-md-3 control-label">Date: <input type="text" class="form-control" name='date' value=""/> <label class="col-md-3 control-label">No of Aliens: <input type="text" class="form-control" name='no_of_aliens' value=""/> <label class="col-md-3 control-label">Color of Aliens: <input type="text" class="form-control" name='color_of_aliens' value=""/> <button type="submit" class="btn btn-success btn-block" value='Submit'>Submit

@endsection

sudo nano routes/web.php Route::post('/info', 'RecordController@store');

Now you can see the Form Page: http://hello.dev/new

Enable store Function to send data to DB
sudo nano app/Http/Controllers/RecordController.php

public function store(Request $request) {               $Record=new Record;

$Record->country=$request->get('country'); $Record->city=$request->get('city'); $Record->date=$request->get('date'); $Record->no_of_aliens=$request->get('no_of_aliens'); $Record->color_of_aliens=$request->get('color_of_aliens');

$Record->save;

return redirect->back; // this will rediect back to the same page to enter more data }

Now you can enter the data from Form Page which will be saved into DB: http://hello.dev/new

Data entered will be visible here: http://hello.dev/view

Showing Messages
sudo nano app/Http/Controllers/RecordController.php

Inside this function: public function store(Request $request) Below this file: $Record->save; Insert: $request->session->flash('flash_message','New record added successfully');

To show above errors/messages: sudo nano resources/views/master.blade.php

Before this section: @yield('content')

Paste: @if(Session::has('flash_message')) @endif

@if (count($errors) > 0) Whoops! There were some errors with your input. <ul> @foreach ($errors->all as $error) </li> @endforeach </ul> @endif

Data Validation using Laravel Request
Generate a request file: cd /var/www/html/hello sudo php artisan make:request RecordDataRequest

Edit this file: sudo nano app/Http/Requests/RecordDataRequest.php

public function authorize {       return true; }

public function rules {       return [ 'country'=>'required', 'city'=>'required', ];   }

Edit this file: sudo nano app/Http/Controllers/RecordController.php Append: use App\Http\Requests\RecordDataRequest;

Edit this file: sudo nano app/Http/Controllers/RecordController.php

Change: public function store(Request $request) To: public function store(RecordDataRequest $request)

Code to display all error messages is already added in earlier section.


 * References