L1_laravel
L1_laravel
LARAVEL
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
BASIC ROUTING
In the routes/web.php, add the new route called contact and return the
view
Route::get('/contact', function() {
return view('contact');
});
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
Write the html code in master.blade and add @yield for the content in the body tag
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About Us</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
<head>
...
<title> @yield('title', 'Laravel Web App’) </title>
</head>
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
@extends('layouts.master')
@section('title', 'Contact')
@section('content')
<h1> Contact Form </h1>
...
@endsection
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
Route::get('/', function () {
$tasks = [
'Go to store ',
'Go to market ',
'Go to work '
];
return view('welcome', [
'tasks' => $tasks
]);
});
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
@extends('layouts.master')
@section('content')
<h1> Here we go !</h1>
<ul>
@foreach ($tasks as $task)
<li> {{ $task }} </li>
@endforeach
</ul>
@endsection
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
CONTROLLERS 101
Create the new controller via : php artisan make:controller PagesController
Route::get('/', 'PagesController@home');
Route::get('/about', 'PagesController@about');
Route::get('/contact', 'PagesController@contact');
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
CONTROLLERS 101
Add the home function in Http/controllers/PagesController.php
// About Page
// Home Page
public function about()
public function home()
{
{
return view('about');
$tasks = [
}
'Go to store ',
// Contact Page
'Go to market ',
public function contact()
'Go to work '
{
];
return view('contact');
return view('welcome', [
}
'tasks' => $tasks
]);
}
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=project_db
DB_USERNAME=root
DB_PASSWORD=
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
$project->save();
App\Project::all();
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
$project->save();
App\Project::all();
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
FORM HANDLING
Create a new route called “projects/create” in web.php
Route::post('/projects', ‘ProjectsController@store');
Route::get('/projects/create', 'ProjectsController@create');
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
FORM HANDLING
Write a new function called create() in the ProjectsController
{{ csrf_field() }}
Make an new view projects/create.blade.php
FORM HANDLING
Write a new function called store() in the ProjectsController
ROUTING CONVENTION
Write a new function called store() in the ProjectsController
proj
G
proje ects.
E
cts inde
T
x
proje proje
G
cts/ cts.c
E
creat reat
T
e e
proje
proj
G cts/
ects.
E{proj
sho
T ect_i
w
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
ROUTING CONVENTION
Change the resource route in web.php
// Route::get('/projects', 'ProjectsController@index');
// Route::post('/projects', 'ProjectsController@store');
// Route::get('/projects/create', 'ProjectsController@create');
Route::resource('/projects', 'ProjectsController');
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
$project->save();
return redirect('/projects');
}
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
return redirect('/projects');
}
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
type="text"
name="title"
placeholder="Project Title"
value="{{ old('title') }}”
>
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
// create_tasks_table.php
Schema::create('tasks', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger(‘project_id');
$table->string('description');
$table->boolean('completed')->default(false);
$table->timestamps();
});
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
Use the HasMany relationship because one project has many tasks …
@if ($project->tasks->count())
<div>
@foreach ($project->tasks as $task)
<li> {{ $task->description }}</li>
@endforeach
</div>
@endif
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
Create the new route for patch request update protected $guarded = [‘id'];
Route::patch('/tasks/{task}', 'ProjectTasksController@update');
@csrf
@method('PATCH')
<label class="{{ $task->completed ? 'completed' : '' }}" for="completed">
<input type="checkbox" name="completed"
onChange="this.form.submit()" {{ $task->completed ? 'checked' : '' }}>
{{ $task->description }}
</label>
</form>
</div>
@endforeach
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
Route::post('/projects/{project}/tasks', 'ProjectTasksController@store');
BETTER ENCAPSULATION
Change the encapsulation for the tasks completed
BETTER ENCAPSULATION
Write the new method in model for the tasks complete / incomplete
MIDDLEWARE
Middleware provide a convenient mechanism for filtering HTTP requests
entering your application.
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
MIDDLEWARE
Two types of middleware : Global Middleware, Assigning Middleware To
Routes
/**
* The application's route middleware.
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
MIDDLEWARE
Assign the route middleware in web.php
Route::resource('/projects', 'ProjectsController')->middleware('auth');
AUTH FACADE
The auth () returns an authenticator instance.
You may use it instead of the Auth facade for convenience: Auth::user ()
auth()->id(); // User Id
auth()->user(); // User Instance
auth()->check(); // Boolean
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
AUTH FACADE
php artisan make:migration add_owner_id_to_projects --table=“projects”
Add this column owner_id & run this command : php artisan migrate:fresh
AUTHORIZATION ESSENTIALS
php artisan make:policy ProjectPolicy --model=Project
AUTHORIZATION ESSENTIALS
php artisan make:policy ProjectPolicy --model=Project
AUTHORIZATION ESSENTIALS
Use the authroize () in ProjectsController.php
AUTHORIZATION ESSENTIALS
Or Simplify the code in web.php
Route::resource('/projects', ‘ProjectsController')
->middleware('can:view, project');
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
API RESOURCES
Building API need a transformation layer between Eloquent models & JSON
responses
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
API RESOURCES
Generate the api resource: php artisan make:resource UserResource
API RESOURCES
Generate the api resource collections: php artisan make:resource
UserCollection
API RESOURCES
Add the new eloquent resource in api.php
namespace App\Http\Resources\ResourceName
Route::get('/users', function(){
$user = App\User::with('projects')->paginate(10);
return new UserCollection($user);
});
Route::get('/users/{id}', function($id){
$user = App\User::with('projects')->find($id);
return new UserResource($user);
});
TEXT
LARAVEL FRAMEWORK FOR BUILDING WEB APP
API RESOURCES
Create a new user from api : php artisan make:request UserRequest
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Validation\ValidationException;
use Illuminate\Http\Exceptions\HttpResponseException;
API RESOURCES
Override the function to response the JSON format.
API RESOURCES
Add a new route and create a new user in api.php