summaryrefslogtreecommitdiff
path: root/Year_3/TSDWL/LARAVEL/iBook/app
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2022-01-24 19:34:26 +0100
committerSanto Cariotti <santo@dcariotti.me>2022-01-24 19:34:26 +0100
commit710f54c0156c5fa081bc6af1a68e7cb44723939b (patch)
tree056a85c362b7b9c5439506a76e0802e57342cc10 /Year_3/TSDWL/LARAVEL/iBook/app
parentb69d50c415ef1571bd42bb3eb1a1b3b38eab43dd (diff)
add example in laravel
Diffstat (limited to 'Year_3/TSDWL/LARAVEL/iBook/app')
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Console/Kernel.php32
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Exceptions/Handler.php41
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/AuthorController.php85
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/BookController.php103
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/Controller.php13
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Kernel.php67
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/Authenticate.php21
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/EncryptCookies.php17
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/PreventRequestsDuringMaintenance.php17
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/RedirectIfAuthenticated.php32
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrimStrings.php19
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustHosts.php20
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustProxies.php28
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/VerifyCsrfToken.php17
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Models/Author.php14
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Models/Book.php18
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Models/User.php44
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Providers/AppServiceProvider.php28
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Providers/AuthServiceProvider.php30
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Providers/BroadcastServiceProvider.php21
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Providers/EventServiceProvider.php32
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/app/Providers/RouteServiceProvider.php63
22 files changed, 762 insertions, 0 deletions
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Console/Kernel.php b/Year_3/TSDWL/LARAVEL/iBook/app/Console/Kernel.php
new file mode 100644
index 0000000..d8bc1d2
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Console/Kernel.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Console;
+
+use Illuminate\Console\Scheduling\Schedule;
+use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
+
+class Kernel extends ConsoleKernel
+{
+ /**
+ * Define the application's command schedule.
+ *
+ * @param \Illuminate\Console\Scheduling\Schedule $schedule
+ * @return void
+ */
+ protected function schedule(Schedule $schedule)
+ {
+ // $schedule->command('inspire')->hourly();
+ }
+
+ /**
+ * Register the commands for the application.
+ *
+ * @return void
+ */
+ protected function commands()
+ {
+ $this->load(__DIR__.'/Commands');
+
+ require base_path('routes/console.php');
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Exceptions/Handler.php b/Year_3/TSDWL/LARAVEL/iBook/app/Exceptions/Handler.php
new file mode 100644
index 0000000..8e7fbd1
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Exceptions/Handler.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace App\Exceptions;
+
+use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
+use Throwable;
+
+class Handler extends ExceptionHandler
+{
+ /**
+ * A list of the exception types that are not reported.
+ *
+ * @var array<int, class-string<Throwable>>
+ */
+ protected $dontReport = [
+ //
+ ];
+
+ /**
+ * A list of the inputs that are never flashed for validation exceptions.
+ *
+ * @var array<int, string>
+ */
+ protected $dontFlash = [
+ 'current_password',
+ 'password',
+ 'password_confirmation',
+ ];
+
+ /**
+ * Register the exception handling callbacks for the application.
+ *
+ * @return void
+ */
+ public function register()
+ {
+ $this->reportable(function (Throwable $e) {
+ //
+ });
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/AuthorController.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/AuthorController.php
new file mode 100644
index 0000000..242464c
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/AuthorController.php
@@ -0,0 +1,85 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Author;
+use Illuminate\Http\Request;
+
+class AuthorController extends Controller
+{
+ /**
+ * Display a listing of the resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function index()
+ {
+ //
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function create()
+ {
+ //
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return \Illuminate\Http\Response
+ */
+ public function store(Request $request)
+ {
+ //
+ }
+
+ /**
+ * Display the specified resource.
+ *
+ * @param \App\Models\Author $author
+ * @return \Illuminate\Http\Response
+ */
+ public function show(Author $author)
+ {
+ //
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param \App\Models\Author $author
+ * @return \Illuminate\Http\Response
+ */
+ public function edit(Author $author)
+ {
+ //
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \App\Models\Author $author
+ * @return \Illuminate\Http\Response
+ */
+ public function update(Request $request, Author $author)
+ {
+ //
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param \App\Models\Author $author
+ * @return \Illuminate\Http\Response
+ */
+ public function destroy(Author $author)
+ {
+ //
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/BookController.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/BookController.php
new file mode 100644
index 0000000..39cf772
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/BookController.php
@@ -0,0 +1,103 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Book;
+use App\Models\Author;
+use Illuminate\Http\Request;
+
+class BookController extends Controller
+{
+ /**
+ * Display a listing of the resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function index()
+ {
+ $books = Book::all();
+
+ return view('books.index')->with('books', $books);
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function create()
+ {
+ $authors = Author::all();
+ return view('books.create')->with('authors', $authors);
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return \Illuminate\Http\Response
+ */
+ public function store(Request $request)
+ {
+ $book = new Book();
+ $book->name = $request['name'];
+ $book->published_at = $request['published_at'];
+ $book->is_online = $request['is_online'] ? 1: 0;
+ $book->author_id = $request['author_id'];
+
+ $book->save();
+
+ return redirect('/books');
+ }
+
+ /**
+ * Display the specified resource.
+ *
+ * @param \App\Models\Book $book
+ * @return \Illuminate\Http\Response
+ */
+ public function show(Book $book)
+ {
+ $authors = Author::all();
+ return view('books.edit')->with('book', $book)->with('authors', $authors);
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param \App\Models\Book $book
+ * @return \Illuminate\Http\Response
+ */
+ public function edit(Book $book)
+ {
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \App\Models\Book $book
+ * @return \Illuminate\Http\Response
+ */
+ public function update(Request $request, Book $book)
+ {
+ $book->name = $request['name'];
+ $book->published_at = $request['published_at'];
+ $book->is_online = $request['is_online'] ? 1: 0;
+ $book->author_id = $request['author_id'];
+
+ $book->save();
+ return redirect('/books/'.$book->id);
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param \App\Models\Book $book
+ * @return \Illuminate\Http\Response
+ */
+ public function destroy(Book $book)
+ {
+ //
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/Controller.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/Controller.php
new file mode 100644
index 0000000..a0a2a8a
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/Controller.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
+use Illuminate\Foundation\Bus\DispatchesJobs;
+use Illuminate\Foundation\Validation\ValidatesRequests;
+use Illuminate\Routing\Controller as BaseController;
+
+class Controller extends BaseController
+{
+ use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Kernel.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Kernel.php
new file mode 100644
index 0000000..d3722c2
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Kernel.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace App\Http;
+
+use Illuminate\Foundation\Http\Kernel as HttpKernel;
+
+class Kernel extends HttpKernel
+{
+ /**
+ * The application's global HTTP middleware stack.
+ *
+ * These middleware are run during every request to your application.
+ *
+ * @var array<int, class-string|string>
+ */
+ protected $middleware = [
+ // \App\Http\Middleware\TrustHosts::class,
+ \App\Http\Middleware\TrustProxies::class,
+ \Fruitcake\Cors\HandleCors::class,
+ \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
+ \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
+ \App\Http\Middleware\TrimStrings::class,
+ \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+ ];
+
+ /**
+ * The application's route middleware groups.
+ *
+ * @var array<string, array<int, class-string|string>>
+ */
+ protected $middlewareGroups = [
+ 'web' => [
+ \App\Http\Middleware\EncryptCookies::class,
+ \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
+ \Illuminate\Session\Middleware\StartSession::class,
+ // \Illuminate\Session\Middleware\AuthenticateSession::class,
+ \Illuminate\View\Middleware\ShareErrorsFromSession::class,
+ \App\Http\Middleware\VerifyCsrfToken::class,
+ \Illuminate\Routing\Middleware\SubstituteBindings::class,
+ ],
+
+ 'api' => [
+ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
+ 'throttle:api',
+ \Illuminate\Routing\Middleware\SubstituteBindings::class,
+ ],
+ ];
+
+ /**
+ * The application's route middleware.
+ *
+ * These middleware may be assigned to groups or used individually.
+ *
+ * @var array<string, class-string|string>
+ */
+ protected $routeMiddleware = [
+ 'auth' => \App\Http\Middleware\Authenticate::class,
+ 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
+ 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
+ 'can' => \Illuminate\Auth\Middleware\Authorize::class,
+ 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
+ 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
+ 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
+ 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
+ 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
+ ];
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/Authenticate.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/Authenticate.php
new file mode 100644
index 0000000..704089a
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/Authenticate.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Auth\Middleware\Authenticate as Middleware;
+
+class Authenticate extends Middleware
+{
+ /**
+ * Get the path the user should be redirected to when they are not authenticated.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return string|null
+ */
+ protected function redirectTo($request)
+ {
+ if (! $request->expectsJson()) {
+ return route('login');
+ }
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/EncryptCookies.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/EncryptCookies.php
new file mode 100644
index 0000000..867695b
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/EncryptCookies.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
+
+class EncryptCookies extends Middleware
+{
+ /**
+ * The names of the cookies that should not be encrypted.
+ *
+ * @var array<int, string>
+ */
+ protected $except = [
+ //
+ ];
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/PreventRequestsDuringMaintenance.php
new file mode 100644
index 0000000..74cbd9a
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/PreventRequestsDuringMaintenance.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
+
+class PreventRequestsDuringMaintenance extends Middleware
+{
+ /**
+ * The URIs that should be reachable while maintenance mode is enabled.
+ *
+ * @var array<int, string>
+ */
+ protected $except = [
+ //
+ ];
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/RedirectIfAuthenticated.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/RedirectIfAuthenticated.php
new file mode 100644
index 0000000..a2813a0
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/RedirectIfAuthenticated.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use App\Providers\RouteServiceProvider;
+use Closure;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+
+class RedirectIfAuthenticated
+{
+ /**
+ * Handle an incoming request.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
+ * @param string|null ...$guards
+ * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
+ */
+ public function handle(Request $request, Closure $next, ...$guards)
+ {
+ $guards = empty($guards) ? [null] : $guards;
+
+ foreach ($guards as $guard) {
+ if (Auth::guard($guard)->check()) {
+ return redirect(RouteServiceProvider::HOME);
+ }
+ }
+
+ return $next($request);
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrimStrings.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrimStrings.php
new file mode 100644
index 0000000..88cadca
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrimStrings.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
+
+class TrimStrings extends Middleware
+{
+ /**
+ * The names of the attributes that should not be trimmed.
+ *
+ * @var array<int, string>
+ */
+ protected $except = [
+ 'current_password',
+ 'password',
+ 'password_confirmation',
+ ];
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustHosts.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustHosts.php
new file mode 100644
index 0000000..7186414
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustHosts.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Http\Middleware\TrustHosts as Middleware;
+
+class TrustHosts extends Middleware
+{
+ /**
+ * Get the host patterns that should be trusted.
+ *
+ * @return array<int, string|null>
+ */
+ public function hosts()
+ {
+ return [
+ $this->allSubdomainsOfApplicationUrl(),
+ ];
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustProxies.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustProxies.php
new file mode 100644
index 0000000..3391630
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustProxies.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Http\Middleware\TrustProxies as Middleware;
+use Illuminate\Http\Request;
+
+class TrustProxies extends Middleware
+{
+ /**
+ * The trusted proxies for this application.
+ *
+ * @var array<int, string>|string|null
+ */
+ protected $proxies;
+
+ /**
+ * The headers that should be used to detect proxies.
+ *
+ * @var int
+ */
+ protected $headers =
+ Request::HEADER_X_FORWARDED_FOR |
+ Request::HEADER_X_FORWARDED_HOST |
+ Request::HEADER_X_FORWARDED_PORT |
+ Request::HEADER_X_FORWARDED_PROTO |
+ Request::HEADER_X_FORWARDED_AWS_ELB;
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/VerifyCsrfToken.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/VerifyCsrfToken.php
new file mode 100644
index 0000000..9e86521
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/VerifyCsrfToken.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
+
+class VerifyCsrfToken extends Middleware
+{
+ /**
+ * The URIs that should be excluded from CSRF verification.
+ *
+ * @var array<int, string>
+ */
+ protected $except = [
+ //
+ ];
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Models/Author.php b/Year_3/TSDWL/LARAVEL/iBook/app/Models/Author.php
new file mode 100644
index 0000000..bd3b4cf
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Models/Author.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class Author extends Model
+{
+ use HasFactory;
+
+ // Used by an example inside `tinker` shell
+ protected $fillable = ['name'];
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Models/Book.php b/Year_3/TSDWL/LARAVEL/iBook/app/Models/Book.php
new file mode 100644
index 0000000..98c4ac2
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Models/Book.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+use App\Models\Author;
+
+class Book extends Model
+{
+ use HasFactory;
+
+ public function author()
+ {
+ return $this->belongsTo(Author::class);
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Models/User.php b/Year_3/TSDWL/LARAVEL/iBook/app/Models/User.php
new file mode 100644
index 0000000..8996368
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Models/User.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Contracts\Auth\MustVerifyEmail;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Foundation\Auth\User as Authenticatable;
+use Illuminate\Notifications\Notifiable;
+use Laravel\Sanctum\HasApiTokens;
+
+class User extends Authenticatable
+{
+ use HasApiTokens, HasFactory, Notifiable;
+
+ /**
+ * The attributes that are mass assignable.
+ *
+ * @var array<int, string>
+ */
+ protected $fillable = [
+ 'name',
+ 'email',
+ 'password',
+ ];
+
+ /**
+ * The attributes that should be hidden for serialization.
+ *
+ * @var array<int, string>
+ */
+ protected $hidden = [
+ 'password',
+ 'remember_token',
+ ];
+
+ /**
+ * The attributes that should be cast.
+ *
+ * @var array<string, string>
+ */
+ protected $casts = [
+ 'email_verified_at' => 'datetime',
+ ];
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Providers/AppServiceProvider.php b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/AppServiceProvider.php
new file mode 100644
index 0000000..ee8ca5b
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/AppServiceProvider.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Providers;
+
+use Illuminate\Support\ServiceProvider;
+
+class AppServiceProvider extends ServiceProvider
+{
+ /**
+ * Register any application services.
+ *
+ * @return void
+ */
+ public function register()
+ {
+ //
+ }
+
+ /**
+ * Bootstrap any application services.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ //
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Providers/AuthServiceProvider.php b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/AuthServiceProvider.php
new file mode 100644
index 0000000..22b77e6
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/AuthServiceProvider.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Providers;
+
+use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
+use Illuminate\Support\Facades\Gate;
+
+class AuthServiceProvider extends ServiceProvider
+{
+ /**
+ * The policy mappings for the application.
+ *
+ * @var array<class-string, class-string>
+ */
+ protected $policies = [
+ // 'App\Models\Model' => 'App\Policies\ModelPolicy',
+ ];
+
+ /**
+ * Register any authentication / authorization services.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ $this->registerPolicies();
+
+ //
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Providers/BroadcastServiceProvider.php b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/BroadcastServiceProvider.php
new file mode 100644
index 0000000..395c518
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/BroadcastServiceProvider.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Providers;
+
+use Illuminate\Support\Facades\Broadcast;
+use Illuminate\Support\ServiceProvider;
+
+class BroadcastServiceProvider extends ServiceProvider
+{
+ /**
+ * Bootstrap any application services.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ Broadcast::routes();
+
+ require base_path('routes/channels.php');
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Providers/EventServiceProvider.php b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/EventServiceProvider.php
new file mode 100644
index 0000000..23499eb
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/EventServiceProvider.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Providers;
+
+use Illuminate\Auth\Events\Registered;
+use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
+use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
+use Illuminate\Support\Facades\Event;
+
+class EventServiceProvider extends ServiceProvider
+{
+ /**
+ * The event listener mappings for the application.
+ *
+ * @var array<class-string, array<int, class-string>>
+ */
+ protected $listen = [
+ Registered::class => [
+ SendEmailVerificationNotification::class,
+ ],
+ ];
+
+ /**
+ * Register any events for your application.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ //
+ }
+}
diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Providers/RouteServiceProvider.php b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/RouteServiceProvider.php
new file mode 100644
index 0000000..3bd3c81
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/RouteServiceProvider.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace App\Providers;
+
+use Illuminate\Cache\RateLimiting\Limit;
+use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\RateLimiter;
+use Illuminate\Support\Facades\Route;
+
+class RouteServiceProvider extends ServiceProvider
+{
+ /**
+ * The path to the "home" route for your application.
+ *
+ * This is used by Laravel authentication to redirect users after login.
+ *
+ * @var string
+ */
+ public const HOME = '/home';
+
+ /**
+ * The controller namespace for the application.
+ *
+ * When present, controller route declarations will automatically be prefixed with this namespace.
+ *
+ * @var string|null
+ */
+ // protected $namespace = 'App\\Http\\Controllers';
+
+ /**
+ * Define your route model bindings, pattern filters, etc.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ $this->configureRateLimiting();
+
+ $this->routes(function () {
+ Route::prefix('api')
+ ->middleware('api')
+ ->namespace($this->namespace)
+ ->group(base_path('routes/api.php'));
+
+ Route::middleware('web')
+ ->namespace($this->namespace)
+ ->group(base_path('routes/web.php'));
+ });
+ }
+
+ /**
+ * Configure the rate limiters for the application.
+ *
+ * @return void
+ */
+ protected function configureRateLimiting()
+ {
+ RateLimiter::for('api', function (Request $request) {
+ return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
+ });
+ }
+}