Developer Blog

Tipps und Tricks für Entwickler und IT-Interessierte

Laravel Toolbox

Laravel | Vergleich Inertia und Livewire Starter-kit

Vergleich der Dateien

TypeFileFolder
FilesKernel.phplaravel-starter-jetstream-inertia/app/Http
Filespackages.phplaravel-starter-jetstream-inertia/bootstrap/cache
Filesservices.phplaravel-starter-jetstream-inertia/bootstrap/cache
Filescomposer.jsonlaravel-starter-jetstream-inertia
Filesjetstream.phplaravel-starter-jetstream-inertia/config
Filespackage.jsonlaravel-starter-jetstream-inertia
Filesapp.csslaravel-starter-jetstream-inertia/public/css/app.css
Filesapp.jslaravel-starter-jetstream-inertia/public/js
Filesapp.jslaravel-starter-jetstream-inertia/resources/js
Filesweb.phplaravel-starter-jetstream-inertia/routes
Filestailwind.config.jslaravel-starter-jetstream-inertia
FilesApiTokenPermissionsTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesBrowserSessionsTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesCreateApiTokenTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesCreateTeamTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesDeleteAccountTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesDeleteApiTokenTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesDeleteTeamTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesInviteTeamMemberTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesLeaveTeamTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesProfileInformationTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesRemoveTeamMemberTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesTwoFactorAuthenticationSettingsTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesUpdatePasswordTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesUpdateTeamMemberRoleTest.phplaravel-starter-jetstream-inertia/tests/Feature
FilesUpdateTeamNameTest.phplaravel-starter-jetstream-inertia/tests/Feature
Filesautoload.phplaravel-starter-jetstream-inertia/vendor
Filesautoload_classmap.phplaravel-starter-jetstream-inertia/vendor/composer
Filesautoload_files.phplaravel-starter-jetstream-inertia/vendor/composer
Filesautoload_psr4.phplaravel-starter-jetstream-inertia/vendor/composer
Filesautoload_real.phplaravel-starter-jetstream-inertia/vendor/composer
Filesautoload_static.phplaravel-starter-jetstream-inertia/vendor/composer
Filesinstalled.jsonlaravel-starter-jetstream-inertia/vendor/composer
Filesinstalled.phplaravel-starter-jetstream-inertia/vendor/composer
Fileswebpack.mix.jslaravel-starter-jetstream-inertia
Only incomposer.locklaravel-starter-jetstream-inertia
Only inwebpack.config.jslaravel-starter-jetstream-inertia
Only inHandleInertiaRequests.phplaravel-starter-jetstream-inertia/app/Http/Middleware
Only in2022_01_16_142014_create_sessions_table.phplaravel-starter-jetstream-inertia/database/migrations
Only inJetstreamlaravel-starter-jetstream-inertia/resources/js
Only inLayoutslaravel-starter-jetstream-inertia/resources/js
Only inPageslaravel-starter-jetstream-inertia/resources/js
Only inapp.blade.phplaravel-starter-jetstream-inertia/resources/views
Only inlaravel.loglaravel-starter-jetstream-inertia/storage/logs
Only ininertiajslaravel-starter-jetstream-inertia/vendor
Only intightencolaravel-starter-jetstream-inertia/vendor
Only inViewlaravel-starter-jetstream-livewire/app
Only in2022_01_16_142135_create_sessions_table.phplaravel-starter-jetstream-livewire/database/migrations
Only inapilaravel-starter-jetstream-livewire/resources/views
Only inauthlaravel-starter-jetstream-livewire/resources/views
Only indashboard.blade.phplaravel-starter-jetstream-livewire/resources/views
Only inlayoutslaravel-starter-jetstream-livewire/resources/views
Only innavigation-menu.blade.phplaravel-starter-jetstream-livewire/resources/views
Only inpolicy.blade.phplaravel-starter-jetstream-livewire/resources/views
Only inprofilelaravel-starter-jetstream-livewire/resources/views
Only inteamslaravel-starter-jetstream-livewire/resources/views
Only interms.blade.phplaravel-starter-jetstream-livewire/resources/views
Only inwelcome.blade.phplaravel-starter-jetstream-livewire/resources/views
Only inlivewirelaravel-starter-jetstream-livewire/vendor

Änderungen

app/Http/Kernel.php

Changes

<             \App\Http\Middleware\HandleInertiaRequests::class,

Only inapp/Http/Middleware: HandleInertiaRequests.php

Only inlaravel-starter-jetstream-livewire/app: View

bootstrap/cache/packages.php

Changes

<   'inertiajs/inertia-laravel' => 
<   array (
<     'providers' => 
<     array (
<       0 => 'Inertia ServiceProvider',
<     ),
<   ),

Changes

<   'nesbot/carbon' => 
---
>   'livewire/livewire' =>

Changes

<       0 => 'Carbon Laravel ServiceProvider',
---
>       0 => 'Livewire LivewireServiceProvider',
>     ),
>     'aliases' => 
>     array (
>       'Livewire' => 'Livewire Livewire',

Changes

<   'nunomaduro/collision' => 
---
>   'nesbot/carbon' =>

Changes

<       0 => 'NunoMaduro Collision Adapters Laravel CollisionServiceProvider',
---
>       0 => 'Carbon Laravel ServiceProvider',

Changes

<   'tightenco/ziggy' => 
---
>   'nunomaduro/collision' =>

Changes

<       0 => 'Tightenco Ziggy ZiggyServiceProvider',
---
>       0 => 'NunoMaduro Collision Adapters Laravel CollisionServiceProvider',

bootstrap/cache/services.php

Changes

<     24 => 'Inertia ServiceProvider',
<     25 => 'Jenssegers Agent AgentServiceProvider',
<     26 => 'Laravel Fortify FortifyServiceProvider',
<     27 => 'Laravel Jetstream JetstreamServiceProvider',
<     28 => 'Laravel Sail SailServiceProvider',
<     29 => 'Laravel Sanctum SanctumServiceProvider',
<     30 => 'Laravel Tinker TinkerServiceProvider',
---
>     24 => 'Jenssegers Agent AgentServiceProvider',
>     25 => 'Laravel Fortify FortifyServiceProvider',
>     26 => 'Laravel Jetstream JetstreamServiceProvider',
>     27 => 'Laravel Sail SailServiceProvider',
>     28 => 'Laravel Sanctum SanctumServiceProvider',
>     29 => 'Laravel Tinker TinkerServiceProvider',
>     30 => 'Livewire LivewireServiceProvider',

Changes

<     33 => 'Tightenco Ziggy ZiggyServiceProvider',
<     34 => 'App Providers AppServiceProvider',
<     35 => 'App Providers AuthServiceProvider',
<     36 => 'App Providers EventServiceProvider',
<     37 => 'App Providers RouteServiceProvider',
<     38 => 'App Providers FortifyServiceProvider',
<     39 => 'App Providers JetstreamServiceProvider',
---
>     33 => 'App Providers AppServiceProvider',
>     34 => 'App Providers AuthServiceProvider',
>     35 => 'App Providers EventServiceProvider',
>     36 => 'App Providers RouteServiceProvider',
>     37 => 'App Providers FortifyServiceProvider',
>     38 => 'App Providers JetstreamServiceProvider',

Changes

<     12 => 'Inertia ServiceProvider',
<     13 => 'Jenssegers Agent AgentServiceProvider',
<     14 => 'Laravel Fortify FortifyServiceProvider',
<     15 => 'Laravel Jetstream JetstreamServiceProvider',
<     16 => 'Laravel Sanctum SanctumServiceProvider',
---
>     12 => 'Jenssegers Agent AgentServiceProvider',
>     13 => 'Laravel Fortify FortifyServiceProvider',
>     14 => 'Laravel Jetstream JetstreamServiceProvider',
>     15 => 'Laravel Sanctum SanctumServiceProvider',
>     16 => 'Livewire LivewireServiceProvider',

Changes

<     19 => 'Tightenco Ziggy ZiggyServiceProvider',
<     20 => 'App Providers AppServiceProvider',
<     21 => 'App Providers AuthServiceProvider',
<     22 => 'App Providers EventServiceProvider',
<     23 => 'App Providers RouteServiceProvider',
<     24 => 'App Providers FortifyServiceProvider',
<     25 => 'App Providers JetstreamServiceProvider',
---
>     19 => 'App Providers AppServiceProvider',
>     20 => 'App Providers AuthServiceProvider',
>     21 => 'App Providers EventServiceProvider',
>     22 => 'App Providers RouteServiceProvider',
>     23 => 'App Providers FortifyServiceProvider',
>     24 => 'App Providers JetstreamServiceProvider',

composer.json

Changes

<         "inertiajs/inertia-laravel": "^0.5.2",

Changes

<         "tightenco/ziggy": "^1.0"
---
>         "livewire/livewire": "^2.5"

Only in laravel-starter-jetstream-inertia: composer.lock

config/jetstream.php

Changes

<     'stack' => 'inertia',
---
>     'stack' => 'livewire',

Only in database/migrations: 2022_01_16_142014_create_sessions_table.php

Only in

package.json

Changes

<         "@inertiajs/inertia": "^0.10.0",
<         "@inertiajs/inertia-vue3": "^0.5.1",
<         "@inertiajs/progress": "^0.2.6",

Changes

<         "@vue/compiler-sfc": "^3.0.5",
---
>         "alpinejs": "^3.0.6",

Changes

<         "postcss-import": "^12.0.1",
---
>         "postcss-import": "^14.0.1",

Changes

<         "vue": "^3.0.5",
<         "vue-loader": "^16.1.2",

Only in laravel-starter-jetstream-livewire: pnpm-lock.yaml

Only in resources/js: Jetstream

Only in resources/js: Layouts

Only in resources/js: Pages

resources/js/app.js

Changes

< import { createApp, h } from 'vue';
< import { createInertiaApp } from '@inertiajs/inertia-vue3';
< import { InertiaProgress } from '@inertiajs/progress';
---
> import Alpine from 'alpinejs';

Changes

< const appName = window.document.getElementsByTagName('title')[0]?.innerText || 'Laravel';
---
> window.Alpine = Alpine;

Changes

< createInertiaApp({
<     title: (title) => `${title} - ${appName}`,
<     resolve: (name) => require(`./Pages/${name}.vue`),
<     setup({ el, app, props, plugin }) {
<         return createApp({ render: () => h(app, props) })
<             .use(plugin)
<             .mixin({ methods: { route } })
<             .mount(el);
<     },
< });
< 
< InertiaProgress.init({ color: '#4B5563' });
---
> Alpine.start();

Only in

Only in resources/views: app.blade.php

Only in

Only in

Only in

Only inlaravel-starter-jetstream-livewire/resources/views: navigation-menu.blade.php

Only inlaravel-starter-jetstream-livewire/resources/views: policy.blade.php

Only inlaravel-starter-jetstream-livewire/resources/views: profile

Only inlaravel-starter-jetstream-livewire/resources/views: teams

Only inlaravel-starter-jetstream-livewire/resources/views: terms.blade.php

Only inlaravel-starter-jetstream-livewire/resources/views: welcome.blade.php

routes/web.php

Changes

< use Illuminate\Foundation\Application;

Changes

< use Inertia\Inertia;

Changes

<     return Inertia::render('Welcome', [
<         'canLogin' => Route::has('login'),
<         'canRegister' => Route::has('register'),
<         'laravelVersion' => Application::VERSION,
<         'phpVersion' => PHP_VERSION,
<     ]);
---
>     return view('welcome');

Changes

<     return Inertia::render('Dashboard');
---
>     return view('dashboard');

Only instorage/logs: laravel.log

tailwind.config.js

Changes

<         './resources/js/**/*.vue',

tests/Feature/ApiTokenPermissionsTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\ApiTokenManager;
> use Livewire\Livewire;

Changes

<         $response = $this->put('/user/api-tokens/'.$token->id, [
<             'name' => $token->name,
<             'permissions' => [
<                 'delete',
<                 'missing-permission',
<             ],
<         ]);
---
>         Livewire::test(ApiTokenManager::class)
>                     ->set(['managingPermissionsFor' => $token])
>                     ->set(['updateApiTokenForm' => [
>                         'permissions' => [
>                             'delete',
>                             'missing-permission',
>                         ],
>                     ]])
>                     ->call('updateApiToken');
## tests/Feature/BrowserSessionsTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\LogoutOtherBrowserSessionsForm;
> use Livewire\Livewire;

Changes

<         $response = $this->delete('/user/other-browser-sessions', [
<             'password' => 'password',
<         ]);
< 
<         $response->assertSessionHasNoErrors();
---
>         Livewire::test(LogoutOtherBrowserSessionsForm::class)
>                 ->set('password', 'password')
>                 ->call('logoutOtherBrowserSessions');
## tests/Feature/CreateApiTokenTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\ApiTokenManager;
> use Livewire\Livewire;

Changes

<         $response = $this->post('/user/api-tokens', [
<             'name' => 'Test Token',
<             'permissions' => [
<                 'read',
<                 'update',
<             ],
<         ]);
---
>         Livewire::test(ApiTokenManager::class)
>                     ->set(['createApiTokenForm' => [
>                         'name' => 'Test Token',
>                         'permissions' => [
>                             'read',
>                             'update',
>                         ],
>                     ]])
>                     ->call('createApiToken');
## tests/Feature/CreateTeamTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\CreateTeamForm;
> use Livewire\Livewire;

Changes

<         $response = $this->post('/teams', [
<             'name' => 'Test Team',
<         ]);
---
>         Livewire::test(CreateTeamForm::class)
>                     ->set(['state' => ['name' => 'Test Team']])
>                     ->call('createTeam');
## tests/Feature/DeleteAccountTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\DeleteUserForm;
> use Livewire\Livewire;

Changes

<         $response = $this->delete('/user', [
<             'password' => 'password',
<         ]);
---
>         $component = Livewire::test(DeleteUserForm::class)
>                         ->set('password', 'password')
>                         ->call('deleteUser');

Changes

<         $response = $this->delete('/user', [
<             'password' => 'wrong-password',
<         ]);
---
>         Livewire::test(DeleteUserForm::class)
>                         ->set('password', 'wrong-password')
>                         ->call('deleteUser')
>                         ->assertHasErrors(['password']);
## tests/Feature/DeleteApiTokenTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\ApiTokenManager;
> use Livewire\Livewire;

Changes

<         $response = $this->delete('/user/api-tokens/'.$token->id);
---
>         Livewire::test(ApiTokenManager::class)
>                     ->set(['apiTokenIdBeingDeleted' => $token->id])
>                     ->call('deleteApiToken');
## tests/Feature/DeleteTeamTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\DeleteTeamForm;
> use Livewire\Livewire;

Changes

<         $response = $this->delete('/teams/'.$team->id);
---
>         $component = Livewire::test(DeleteTeamForm::class, ['team' => $team->fresh()])
>                                 ->call('deleteTeam');

Changes

<         $response = $this->delete('/teams/'.$user->currentTeam->id);
---
>         $component = Livewire::test(DeleteTeamForm::class, ['team' => $user->currentTeam])
>                                 ->call('deleteTeam')
>                                 ->assertHasErrors(['team']);
## tests/Feature/InviteTeamMemberTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\TeamMemberManager;

Changes

> use Livewire\Livewire;

Changes

<         $response = $this->post('/teams/'.$user->currentTeam->id.'/members', [
<             'email' => 'test@example.com',
<             'role' => 'admin',
<         ]);
---
>         $component = Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])
>                         ->set('addTeamMemberForm', [
>                             'email' => 'test@example.com',
>                             'role' => 'admin',
>                         ])->call('addTeamMember');

Changes

<         $invitation = $user->currentTeam->teamInvitations()->create([
<             'email' => 'test@example.com',
<             'role' => 'admin',
<         ]);
---
>         // Add the team member...
>         $component = Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])
>                         ->set('addTeamMemberForm', [
>                             'email' => 'test@example.com',
>                             'role' => 'admin',
>                         ])->call('addTeamMember');

Changes

<         $response = $this->delete('/team-invitations/'.$invitation->id);
---
>         $invitationId = $user->currentTeam->fresh()->teamInvitations->first()->id;
> 
>         // Cancel the team invitation...
>         $component->call('cancelTeamInvitation', $invitationId);

tests/Feature/LeaveTeamTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\TeamMemberManager;
> use Livewire\Livewire;

Changes

<         $response = $this->delete('/teams/'.$user->currentTeam->id.'/members/'.$otherUser->id);
---
>         $component = Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])
>                         ->call('leaveTeam');

Changes

<         $response = $this->delete('/teams/'.$user->currentTeam->id.'/members/'.$user->id);
< 
<         $response->assertSessionHasErrorsIn('removeTeamMember', ['team']);
---
>         $component = Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])
>                         ->call('leaveTeam')
>                         ->assertHasErrors(['team']);
## tests/Feature/ProfileInformationTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\UpdateProfileInformationForm;
> use Livewire\Livewire;

Changes

>     public function test_current_profile_information_is_available()
>     {
>         $this->actingAs($user = User::factory()->create());
> 
>         $component = Livewire::test(UpdateProfileInformationForm::class);
> 
>         $this->assertEquals($user->name, $component->state['name']);
>         $this->assertEquals($user->email, $component->state['email']);
>     }
> 

Changes

<         $response = $this->put('/user/profile-information', [
<             'name' => 'Test Name',
<             'email' => 'test@example.com',
<         ]);
---
>         Livewire::test(UpdateProfileInformationForm::class)
>                 ->set('state', ['name' => 'Test Name', 'email' => 'test@example.com'])
>                 ->call('updateProfileInformation');
## tests/Feature/RemoveTeamMemberTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\TeamMemberManager;
> use Livewire\Livewire;

Changes

<         $response = $this->delete('/teams/'.$user->currentTeam->id.'/members/'.$otherUser->id);
---
>         $component = Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])
>                         ->set('teamMemberIdBeingRemoved', $otherUser->id)
>                         ->call('removeTeamMember');

Changes

<         $response = $this->delete('/teams/'.$user->currentTeam->id.'/members/'.$user->id);
< 
<         $response->assertStatus(403);
---
>         $component = Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])
>                         ->set('teamMemberIdBeingRemoved', $user->id)
>                         ->call('removeTeamMember')
>                         ->assertStatus(403);
## tests/Feature/TwoFactorAuthenticationSettingsTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\TwoFactorAuthenticationForm;
> use Livewire\Livewire;

Changes

<         $response = $this->post('/user/two-factor-authentication');
---
>         Livewire::test(TwoFactorAuthenticationForm::class)
>                 ->call('enableTwoFactorAuthentication');

Changes

<         $this->assertNotNull($user->fresh()->two_factor_secret);
<         $this->assertCount(8, $user->fresh()->recoveryCodes());
---
>         $user = $user->fresh();
> 
>         $this->assertNotNull($user->two_factor_secret);
>         $this->assertCount(8, $user->recoveryCodes());

Changes

<         $this->post('/user/two-factor-authentication');
<         $this->post('/user/two-factor-recovery-codes');
---
>         $component = Livewire::test(TwoFactorAuthenticationForm::class)
>                 ->call('enableTwoFactorAuthentication')
>                 ->call('regenerateRecoveryCodes');

Changes

<         $this->post('/user/two-factor-recovery-codes');
---
>         $component->call('regenerateRecoveryCodes');

Changes

<         $this->post('/user/two-factor-authentication');
---
>         $component = Livewire::test(TwoFactorAuthenticationForm::class)
>                 ->call('enableTwoFactorAuthentication');

Changes

<         $this->delete('/user/two-factor-authentication');
---
>         $component->call('disableTwoFactorAuthentication');
## tests/Feature/UpdatePasswordTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\UpdatePasswordForm;
> use Livewire\Livewire;

Changes

<         $response = $this->put('/user/password', [
<             'current_password' => 'password',
<             'password' => 'new-password',
<             'password_confirmation' => 'new-password',
<         ]);
---
>         Livewire::test(UpdatePasswordForm::class)
>                 ->set('state', [
>                     'current_password' => 'password',
>                     'password' => 'new-password',
>                     'password_confirmation' => 'new-password',
>                 ])
>                 ->call('updatePassword');

Changes

<         $response = $this->put('/user/password', [
<             'current_password' => 'wrong-password',
<             'password' => 'new-password',
<             'password_confirmation' => 'new-password',
<         ]);
< 
<         $response->assertSessionHasErrors();
---
>         Livewire::test(UpdatePasswordForm::class)
>                 ->set('state', [
>                     'current_password' => 'wrong-password',
>                     'password' => 'new-password',
>                     'password_confirmation' => 'new-password',
>                 ])
>                 ->call('updatePassword')
>                 ->assertHasErrors(['current_password']);

Changes

<         $response = $this->put('/user/password', [
<             'current_password' => 'password',
<             'password' => 'new-password',
<             'password_confirmation' => 'wrong-password',
<         ]);
< 
<         $response->assertSessionHasErrors();
---
>         Livewire::test(UpdatePasswordForm::class)
>                 ->set('state', [
>                     'current_password' => 'password',
>                     'password' => 'new-password',
>                     'password_confirmation' => 'wrong-password',
>                 ])
>                 ->call('updatePassword')
>                 ->assertHasErrors(['password']);
## tests/Feature/UpdateTeamMemberRoleTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\TeamMemberManager;
> use Livewire\Livewire;

Changes

<         $response = $this->put('/teams/'.$user->currentTeam->id.'/members/'.$otherUser->id, [
<             'role' => 'editor',
<         ]);
---
>         $component = Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])
>                         ->set('managingRoleFor', $otherUser)
>                         ->set('currentRole', 'editor')
>                         ->call('updateRole');

Changes

<         $response = $this->put('/teams/'.$user->currentTeam->id.'/members/'.$otherUser->id, [
<             'role' => 'editor',
<         ]);
---
>         $component = Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])
>                         ->set('managingRoleFor', $otherUser)
>                         ->set('currentRole', 'editor')
>                         ->call('updateRole')
>                         ->assertStatus(403);
## tests/Feature/UpdateTeamNameTest.php

Changes

> use Laravel\Jetstream\Http\Livewire\UpdateTeamNameForm;
> use Livewire\Livewire;

Changes

<         $response = $this->put('/teams/'.$user->currentTeam->id, [
<             'name' => 'Test Team',
<         ]);
---
>         Livewire::test(UpdateTeamNameForm::class, ['team' => $user->currentTeam])
>                     ->set(['state' => ['name' => 'Test Team']])
>                     ->call('updateTeamName');

vendor/autoload.php

Changes

< return ComposerAutoloaderInit1a366ea8c9013f37377c59393191f427::getLoader();
---
> return ComposerAutoloaderInitf2da6e83b085fd96649a1eced6ba9cbb::getLoader();
## vendor/composer/autoload_classmap.php

Changes

<     'Inertia Console CreateMiddleware' => $vendorDir . '/inertiajs/inertia-laravel/src/Console/CreateMiddleware.php',
<     'Inertia Controller' => $vendorDir . '/inertiajs/inertia-laravel/src/Controller.php',
<     'Inertia Directive' => $vendorDir . '/inertiajs/inertia-laravel/src/Directive.php',
<     'Inertia Inertia' => $vendorDir . '/inertiajs/inertia-laravel/src/Inertia.php',
<     'Inertia LazyProp' => $vendorDir . '/inertiajs/inertia-laravel/src/LazyProp.php',
<     'Inertia Middleware' => $vendorDir . '/inertiajs/inertia-laravel/src/Middleware.php',
<     'Inertia Response' => $vendorDir . '/inertiajs/inertia-laravel/src/Response.php',
<     'Inertia ResponseFactory' => $vendorDir . '/inertiajs/inertia-laravel/src/ResponseFactory.php',
<     'Inertia ServiceProvider' => $vendorDir . '/inertiajs/inertia-laravel/src/ServiceProvider.php',
<     'Inertia Ssr Gateway' => $vendorDir . '/inertiajs/inertia-laravel/src/Ssr/Gateway.php',
<     'Inertia Ssr HttpGateway' => $vendorDir . '/inertiajs/inertia-laravel/src/Ssr/HttpGateway.php',
<     'Inertia Ssr Response' => $vendorDir . '/inertiajs/inertia-laravel/src/Ssr/Response.php',
<     'Inertia Testing Assert' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Assert.php',
<     'Inertia Testing AssertableInertia' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/AssertableInertia.php',
<     'Inertia Testing Concerns Debugging' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Concerns/Debugging.php',
<     'Inertia Testing Concerns Has' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Concerns/Has.php',
<     'Inertia Testing Concerns Interaction' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Concerns/Interaction.php',
<     'Inertia Testing Concerns Matching' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Concerns/Matching.php',
<     'Inertia Testing Concerns PageObject' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Concerns/PageObject.php',
<     'Inertia Testing TestResponseMacros' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/TestResponseMacros.php',

Changes

>     'Livewire Castable' => $vendorDir . '/livewire/livewire/src/Castable.php',
>     'Livewire Commands ComponentParser' => $vendorDir . '/livewire/livewire/src/Commands/ComponentParser.php',
>     'Livewire Commands ComponentParserFromExistingComponent' => $vendorDir . '/livewire/livewire/src/Commands/ComponentParserFromExistingComponent.php',
>     'Livewire Commands CopyCommand' => $vendorDir . '/livewire/livewire/src/Commands/CopyCommand.php',
>     'Livewire Commands CpCommand' => $vendorDir . '/livewire/livewire/src/Commands/CpCommand.php',
>     'Livewire Commands DeleteCommand' => $vendorDir . '/livewire/livewire/src/Commands/DeleteCommand.php',
>     'Livewire Commands DiscoverCommand' => $vendorDir . '/livewire/livewire/src/Commands/DiscoverCommand.php',
>     'Livewire Commands FileManipulationCommand' => $vendorDir . '/livewire/livewire/src/Commands/FileManipulationCommand.php',
>     'Livewire Commands MakeCommand' => $vendorDir . '/livewire/livewire/src/Commands/MakeCommand.php',
>     'Livewire Commands MakeLivewireCommand' => $vendorDir . '/livewire/livewire/src/Commands/MakeLivewireCommand.php',
>     'Livewire Commands MoveCommand' => $vendorDir . '/livewire/livewire/src/Commands/MoveCommand.php',
>     'Livewire Commands MvCommand' => $vendorDir . '/livewire/livewire/src/Commands/MvCommand.php',
>     'Livewire Commands PublishCommand' => $vendorDir . '/livewire/livewire/src/Commands/PublishCommand.php',
>     'Livewire Commands RmCommand' => $vendorDir . '/livewire/livewire/src/Commands/RmCommand.php',
>     'Livewire Commands S3CleanupCommand' => $vendorDir . '/livewire/livewire/src/Commands/S3CleanupCommand.php',
>     'Livewire Commands StubParser' => $vendorDir . '/livewire/livewire/src/Commands/StubParser.php',
>     'Livewire Commands StubsCommand' => $vendorDir . '/livewire/livewire/src/Commands/StubsCommand.php',
>     'Livewire Commands TouchCommand' => $vendorDir . '/livewire/livewire/src/Commands/TouchCommand.php',
>     'Livewire CompilerEngineForIgnition' => $vendorDir . '/livewire/livewire/src/CompilerEngineForIgnition.php',
>     'Livewire Component' => $vendorDir . '/livewire/livewire/src/Component.php',
>     'Livewire ComponentChecksumManager' => $vendorDir . '/livewire/livewire/src/ComponentChecksumManager.php',
>     'Livewire ComponentConcerns HandlesActions' => $vendorDir . '/livewire/livewire/src/ComponentConcerns/HandlesActions.php',
>     'Livewire ComponentConcerns InteractsWithProperties' => $vendorDir . '/livewire/livewire/src/ComponentConcerns/InteractsWithProperties.php',
>     'Livewire ComponentConcerns PerformsRedirects' => $vendorDir . '/livewire/livewire/src/ComponentConcerns/PerformsRedirects.php',
>     'Livewire ComponentConcerns ReceivesEvents' => $vendorDir . '/livewire/livewire/src/ComponentConcerns/ReceivesEvents.php',
>     'Livewire ComponentConcerns RendersLivewireComponents' => $vendorDir . '/livewire/livewire/src/ComponentConcerns/RendersLivewireComponents.php',
>     'Livewire ComponentConcerns TracksRenderedChildren' => $vendorDir . '/livewire/livewire/src/ComponentConcerns/TracksRenderedChildren.php',
>     'Livewire ComponentConcerns ValidatesInput' => $vendorDir . '/livewire/livewire/src/ComponentConcerns/ValidatesInput.php',
>     'Livewire Connection ConnectionHandler' => $vendorDir . '/livewire/livewire/src/Connection/ConnectionHandler.php',
>     'Livewire Controllers CanPretendToBeAFile' => $vendorDir . '/livewire/livewire/src/Controllers/CanPretendToBeAFile.php',
>     'Livewire Controllers FilePreviewHandler' => $vendorDir . '/livewire/livewire/src/Controllers/FilePreviewHandler.php',
>     'Livewire Controllers FileUploadHandler' => $vendorDir . '/livewire/livewire/src/Controllers/FileUploadHandler.php',
>     'Livewire Controllers HttpConnectionHandler' => $vendorDir . '/livewire/livewire/src/Controllers/HttpConnectionHandler.php',
>     'Livewire Controllers LivewireJavaScriptAssets' => $vendorDir . '/livewire/livewire/src/Controllers/LivewireJavaScriptAssets.php',
>     'Livewire CreateBladeView' => $vendorDir . '/livewire/livewire/src/CreateBladeView.php',
>     'Livewire DisableBrowserCache' => $vendorDir . '/livewire/livewire/src/DisableBrowserCache.php',
>     'Livewire Event' => $vendorDir . '/livewire/livewire/src/Event.php',
>     'Livewire Exceptions BypassViewHandler' => $vendorDir . '/livewire/livewire/src/Exceptions/BypassViewHandler.php',
>     'Livewire Exceptions CannotBindToModelDataWithoutValidationRuleException' => $vendorDir . '/livewire/livewire/src/Exceptions/CannotBindToModelDataWithoutValidationRuleException.php',
>     'Livewire Exceptions CannotUseReservedLivewireComponentProperties' => $vendorDir . '/livewire/livewire/src/Exceptions/CannotUseReservedLivewireComponentProperties.php',
>     'Livewire Exceptions ComponentAttributeMissingOnDynamicComponentException' => $vendorDir . '/livewire/livewire/src/Exceptions/ComponentAttributeMissingOnDynamicComponentException.php',
>     'Livewire Exceptions ComponentNotFoundException' => $vendorDir . '/livewire/livewire/src/Exceptions/ComponentNotFoundException.php',
>     'Livewire Exceptions CorruptComponentPayloadException' => $vendorDir . '/livewire/livewire/src/Exceptions/CorruptComponentPayloadException.php',
>     'Livewire Exceptions DirectlyCallingLifecycleHooksNotAllowedException' => $vendorDir . '/livewire/livewire/src/Exceptions/DirectlyCallingLifecycleHooksNotAllowedException.php',
>     'Livewire Exceptions LivewirePageExpiredBecauseNewDeploymentHasSignificantEnoughChanges' => $vendorDir . '/livewire/livewire/src/Exceptions/LivewirePageExpiredBecauseNewDeploymentHasSignificantEnoughChanges.php',
>     'Livewire Exceptions MethodNotFoundException' => $vendorDir . '/livewire/livewire/src/Exceptions/MethodNotFoundException.php',
>     'Livewire Exceptions MissingFileUploadsTraitException' => $vendorDir . '/livewire/livewire/src/Exceptions/MissingFileUploadsTraitException.php',
>     'Livewire Exceptions MissingRulesException' => $vendorDir . '/livewire/livewire/src/Exceptions/MissingRulesException.php',
>     'Livewire Exceptions NonPublicComponentMethodCall' => $vendorDir . '/livewire/livewire/src/Exceptions/NonPublicComponentMethodCall.php',
>     'Livewire Exceptions PropertyNotFoundException' => $vendorDir . '/livewire/livewire/src/Exceptions/PropertyNotFoundException.php',
>     'Livewire Exceptions PublicPropertyNotFoundException' => $vendorDir . '/livewire/livewire/src/Exceptions/PublicPropertyNotFoundException.php',
>     'Livewire Exceptions PublicPropertyTypeNotAllowedException' => $vendorDir . '/livewire/livewire/src/Exceptions/PublicPropertyTypeNotAllowedException.php',
>     'Livewire Exceptions RootTagMissingFromViewException' => $vendorDir . '/livewire/livewire/src/Exceptions/RootTagMissingFromViewException.php',
>     'Livewire Exceptions S3DoesntSupportMultipleFileUploads' => $vendorDir . '/livewire/livewire/src/Exceptions/S3DoesntSupportMultipleFileUploads.php',
>     'Livewire Features OptimizeRenderedDom' => $vendorDir . '/livewire/livewire/src/Features/OptimizeRenderedDom.php',
>     'Livewire Features Placeholder' => $vendorDir . '/livewire/livewire/src/Features/Placeholder.php',
>     'Livewire Features SupportActionReturns' => $vendorDir . '/livewire/livewire/src/Features/SupportActionReturns.php',
>     'Livewire Features SupportBootMethod' => $vendorDir . '/livewire/livewire/src/Features/SupportBootMethod.php',
>     'Livewire Features SupportBrowserHistory' => $vendorDir . '/livewire/livewire/src/Features/SupportBrowserHistory.php',
>     'Livewire Features SupportChildren' => $vendorDir . '/livewire/livewire/src/Features/SupportChildren.php',
>     'Livewire Features SupportCollections' => $vendorDir . '/livewire/livewire/src/Features/SupportCollections.php',
>     'Livewire Features SupportComponentTraits' => $vendorDir . '/livewire/livewire/src/Features/SupportComponentTraits.php',
>     'Livewire Features SupportDateTimes' => $vendorDir . '/livewire/livewire/src/Features/SupportDateTimes.php',
>     'Livewire Features SupportEvents' => $vendorDir . '/livewire/livewire/src/Features/SupportEvents.php',
>     'Livewire Features SupportFileDownloads' => $vendorDir . '/livewire/livewire/src/Features/SupportFileDownloads.php',
>     'Livewire Features SupportFileUploads' => $vendorDir . '/livewire/livewire/src/Features/SupportFileUploads.php',
>     'Livewire Features SupportLocales' => $vendorDir . '/livewire/livewire/src/Features/SupportLocales.php',
>     'Livewire Features SupportPostDeploymentInvalidation' => $vendorDir . '/livewire/livewire/src/Features/SupportPostDeploymentInvalidation.php',
>     'Livewire Features SupportRedirects' => $vendorDir . '/livewire/livewire/src/Features/SupportRedirects.php',
>     'Livewire Features SupportRootElementTracking' => $vendorDir . '/livewire/livewire/src/Features/SupportRootElementTracking.php',
>     'Livewire Features SupportStacks' => $vendorDir . '/livewire/livewire/src/Features/SupportStacks.php',
>     'Livewire Features SupportValidation' => $vendorDir . '/livewire/livewire/src/Features/SupportValidation.php',
>     'Livewire FileUploadConfiguration' => $vendorDir . '/livewire/livewire/src/FileUploadConfiguration.php',
>     'Livewire GenerateSignedUploadUrl' => $vendorDir . '/livewire/livewire/src/GenerateSignedUploadUrl.php',
>     'Livewire HydrationMiddleware AddAttributesToRootTagOfHtml' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/AddAttributesToRootTagOfHtml.php',
>     'Livewire HydrationMiddleware CallHydrationHooks' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/CallHydrationHooks.php',
>     'Livewire HydrationMiddleware CallPropertyHydrationHooks' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/CallPropertyHydrationHooks.php',
>     'Livewire HydrationMiddleware HashDataPropertiesForDirtyDetection' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/HashDataPropertiesForDirtyDetection.php',
>     'Livewire HydrationMiddleware HydratePublicProperties' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/HydratePublicProperties.php',
>     'Livewire HydrationMiddleware HydrationMiddleware' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/HydrationMiddleware.php',
>     'Livewire HydrationMiddleware NormalizeComponentPropertiesForJavaScript' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/NormalizeComponentPropertiesForJavaScript.php',
>     'Livewire HydrationMiddleware NormalizeDataForJavaScript' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/NormalizeDataForJavaScript.php',
>     'Livewire HydrationMiddleware NormalizeServerMemoSansDataForJavaScript' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/NormalizeServerMemoSansDataForJavaScript.php',
>     'Livewire HydrationMiddleware PerformActionCalls' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/PerformActionCalls.php',
>     'Livewire HydrationMiddleware PerformDataBindingUpdates' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/PerformDataBindingUpdates.php',
>     'Livewire HydrationMiddleware PerformEventEmissions' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/PerformEventEmissions.php',
>     'Livewire HydrationMiddleware RenderView' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/RenderView.php',
>     'Livewire HydrationMiddleware SecureHydrationWithChecksum' => $vendorDir . '/livewire/livewire/src/HydrationMiddleware/SecureHydrationWithChecksum.php',
>     'Livewire ImplicitRouteBinding' => $vendorDir . '/livewire/livewire/src/ImplicitRouteBinding.php',
>     'Livewire ImplicitlyBoundMethod' => $vendorDir . '/livewire/livewire/src/ImplicitlyBoundMethod.php',
>     'Livewire LifecycleManager' => $vendorDir . '/livewire/livewire/src/LifecycleManager.php',
>     'Livewire Livewire' => $vendorDir . '/livewire/livewire/src/Livewire.php',
>     'Livewire LivewireBladeDirectives' => $vendorDir . '/livewire/livewire/src/LivewireBladeDirectives.php',
>     'Livewire LivewireComponentsFinder' => $vendorDir . '/livewire/livewire/src/LivewireComponentsFinder.php',
>     'Livewire LivewireManager' => $vendorDir . '/livewire/livewire/src/LivewireManager.php',
>     'Livewire LivewireServiceProvider' => $vendorDir . '/livewire/livewire/src/LivewireServiceProvider.php',
>     'Livewire LivewireTagCompiler' => $vendorDir . '/livewire/livewire/src/LivewireTagCompiler.php',
>     'Livewire LivewireViewCompilerEngine' => $vendorDir . '/livewire/livewire/src/LivewireViewCompilerEngine.php',
>     'Livewire Macros DuskBrowserMacros' => $vendorDir . '/livewire/livewire/src/Macros/DuskBrowserMacros.php',
>     'Livewire Macros ViewMacros' => $vendorDir . '/livewire/livewire/src/Macros/ViewMacros.php',
>     'Livewire ObjectPrybar' => $vendorDir . '/livewire/livewire/src/ObjectPrybar.php',
>     'Livewire Redirector' => $vendorDir . '/livewire/livewire/src/Redirector.php',
>     'Livewire Request' => $vendorDir . '/livewire/livewire/src/Request.php',
>     'Livewire Response' => $vendorDir . '/livewire/livewire/src/Response.php',
>     'Livewire TemporaryUploadedFile' => $vendorDir . '/livewire/livewire/src/TemporaryUploadedFile.php',
>     'Livewire Testing Concerns HasFunLittleUtilities' => $vendorDir . '/livewire/livewire/src/Testing/Concerns/HasFunLittleUtilities.php',
>     'Livewire Testing Concerns MakesAssertions' => $vendorDir . '/livewire/livewire/src/Testing/Concerns/MakesAssertions.php',
>     'Livewire Testing Concerns MakesCallsToComponent' => $vendorDir . '/livewire/livewire/src/Testing/Concerns/MakesCallsToComponent.php',
>     'Livewire Testing MakesHttpRequestsWrapper' => $vendorDir . '/livewire/livewire/src/Testing/MakesHttpRequestsWrapper.php',
>     'Livewire Testing TestableLivewire' => $vendorDir . '/livewire/livewire/src/Testing/TestableLivewire.php',
>     'Livewire WireDirective' => $vendorDir . '/livewire/livewire/src/WireDirective.php',
>     'Livewire Wireable' => $vendorDir . '/livewire/livewire/src/Wireable.php',
>     'Livewire WithFileUploads' => $vendorDir . '/livewire/livewire/src/WithFileUploads.php',
>     'Livewire WithPagination' => $vendorDir . '/livewire/livewire/src/WithPagination.php',

Changes

<     'Tightenco Ziggy BladeRouteGenerator' => $vendorDir . '/tightenco/ziggy/src/BladeRouteGenerator.php',
<     'Tightenco Ziggy CommandRouteGenerator' => $vendorDir . '/tightenco/ziggy/src/CommandRouteGenerator.php',
<     'Tightenco Ziggy Ziggy' => $vendorDir . '/tightenco/ziggy/src/Ziggy.php',
<     'Tightenco Ziggy ZiggyServiceProvider' => $vendorDir . '/tightenco/ziggy/src/ZiggyServiceProvider.php',

vendor/composer/autoload_files.php

Changes

<     '98caa11a197f6516a8e48aa4abb5ccc6' => $vendorDir . '/inertiajs/inertia-laravel/helpers.php',
---
>     '40275907c8566c390185147049ef6e5d' => $vendorDir . '/livewire/livewire/src/helpers.php',

vendor/composer/autoload_psr4.php

Changes

<     'Tightenco Ziggy ' => array($vendorDir . '/tightenco/ziggy/src'),

Changes

>     'Livewire ' => array($vendorDir . '/livewire/livewire/src'),

Changes

<     'Inertia ' => array($vendorDir . '/inertiajs/inertia-laravel/src'),

vendor/composer/autoload_real.php

Changes

< class ComposerAutoloaderInit1a366ea8c9013f37377c59393191f427
---
> class ComposerAutoloaderInitf2da6e83b085fd96649a1eced6ba9cbb

Changes

<         spl_autoload_register(array('ComposerAutoloaderInit1a366ea8c9013f37377c59393191f427', 'loadClassLoader'), true, true);
---
>         spl_autoload_register(array('ComposerAutoloaderInitf2da6e83b085fd96649a1eced6ba9cbb', 'loadClassLoader'), true, true);

Changes

<         spl_autoload_unregister(array('ComposerAutoloaderInit1a366ea8c9013f37377c59393191f427', 'loadClassLoader'));
---
>         spl_autoload_unregister(array('ComposerAutoloaderInitf2da6e83b085fd96649a1eced6ba9cbb', 'loadClassLoader'));

Changes

<             call_user_func(\Composer\Autoload\ComposerStaticInit1a366ea8c9013f37377c59393191f427::getInitializer($loader));
---
>             call_user_func(\Composer\Autoload\ComposerStaticInitf2da6e83b085fd96649a1eced6ba9cbb::getInitializer($loader));

Changes

<             $includeFiles = Composer\Autoload\ComposerStaticInit1a366ea8c9013f37377c59393191f427::$files;
---
>             $includeFiles = Composer\Autoload\ComposerStaticInitf2da6e83b085fd96649a1eced6ba9cbb::$files;

Changes

<             composerRequire1a366ea8c9013f37377c59393191f427($fileIdentifier, $file);
---
>             composerRequiref2da6e83b085fd96649a1eced6ba9cbb($fileIdentifier, $file);

Changes

< function composerRequire1a366ea8c9013f37377c59393191f427($fileIdentifier, $file)
---
> function composerRequiref2da6e83b085fd96649a1eced6ba9cbb($fileIdentifier, $file)

vendor/composer/autoload_static.php

Changes

< class ComposerStaticInit1a366ea8c9013f37377c59393191f427
---
> class ComposerStaticInitf2da6e83b085fd96649a1eced6ba9cbb

Changes

<         '98caa11a197f6516a8e48aa4abb5ccc6' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/helpers.php',
---
>         '40275907c8566c390185147049ef6e5d' => __DIR__ . '/..' . '/livewire/livewire/src/helpers.php',

Changes

<             'Tightenco Ziggy ' => 16,

Changes

>             'Livewire ' => 9,

Changes

<             'Inertia ' => 8,

Changes

<         'Tightenco Ziggy ' => 
<         array (
<             0 => __DIR__ . '/..' . '/tightenco/ziggy/src',
<         ),

Changes

>         'Livewire ' => 
>         array (
>             0 => __DIR__ . '/..' . '/livewire/livewire/src',
>         ),

Changes

<         'Inertia ' => 
<         array (
<             0 => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src',
<         ),

Changes

<         'Inertia Console CreateMiddleware' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Console/CreateMiddleware.php',
<         'Inertia Controller' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Controller.php',
<         'Inertia Directive' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Directive.php',
<         'Inertia Inertia' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Inertia.php',
<         'Inertia LazyProp' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/LazyProp.php',
<         'Inertia Middleware' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Middleware.php',
<         'Inertia Response' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Response.php',
<         'Inertia ResponseFactory' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/ResponseFactory.php',
<         'Inertia ServiceProvider' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/ServiceProvider.php',
<         'Inertia Ssr Gateway' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Ssr/Gateway.php',
<         'Inertia Ssr HttpGateway' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Ssr/HttpGateway.php',
<         'Inertia Ssr Response' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Ssr/Response.php',
<         'Inertia Testing Assert' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Assert.php',
<         'Inertia Testing AssertableInertia' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/AssertableInertia.php',
<         'Inertia Testing Concerns Debugging' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Concerns/Debugging.php',
<         'Inertia Testing Concerns Has' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Concerns/Has.php',
<         'Inertia Testing Concerns Interaction' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Concerns/Interaction.php',
<         'Inertia Testing Concerns Matching' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Concerns/Matching.php',
<         'Inertia Testing Concerns PageObject' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Concerns/PageObject.php',
<         'Inertia Testing TestResponseMacros' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/TestResponseMacros.php',

Changes

>         'Livewire Castable' => __DIR__ . '/..' . '/livewire/livewire/src/Castable.php',
>         'Livewire Commands ComponentParser' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/ComponentParser.php',
>         'Livewire Commands ComponentParserFromExistingComponent' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/ComponentParserFromExistingComponent.php',
>         'Livewire Commands CopyCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/CopyCommand.php',
>         'Livewire Commands CpCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/CpCommand.php',
>         'Livewire Commands DeleteCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/DeleteCommand.php',
>         'Livewire Commands DiscoverCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/DiscoverCommand.php',
>         'Livewire Commands FileManipulationCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/FileManipulationCommand.php',
>         'Livewire Commands MakeCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/MakeCommand.php',
>         'Livewire Commands MakeLivewireCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/MakeLivewireCommand.php',
>         'Livewire Commands MoveCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/MoveCommand.php',
>         'Livewire Commands MvCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/MvCommand.php',
>         'Livewire Commands PublishCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/PublishCommand.php',
>         'Livewire Commands RmCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/RmCommand.php',
>         'Livewire Commands S3CleanupCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/S3CleanupCommand.php',
>         'Livewire Commands StubParser' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/StubParser.php',
>         'Livewire Commands StubsCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/StubsCommand.php',
>         'Livewire Commands TouchCommand' => __DIR__ . '/..' . '/livewire/livewire/src/Commands/TouchCommand.php',
>         'Livewire CompilerEngineForIgnition' => __DIR__ . '/..' . '/livewire/livewire/src/CompilerEngineForIgnition.php',
>         'Livewire Component' => __DIR__ . '/..' . '/livewire/livewire/src/Component.php',
>         'Livewire ComponentChecksumManager' => __DIR__ . '/..' . '/livewire/livewire/src/ComponentChecksumManager.php',
>         'Livewire ComponentConcerns HandlesActions' => __DIR__ . '/..' . '/livewire/livewire/src/ComponentConcerns/HandlesActions.php',
>         'Livewire ComponentConcerns InteractsWithProperties' => __DIR__ . '/..' . '/livewire/livewire/src/ComponentConcerns/InteractsWithProperties.php',
>         'Livewire ComponentConcerns PerformsRedirects' => __DIR__ . '/..' . '/livewire/livewire/src/ComponentConcerns/PerformsRedirects.php',
>         'Livewire ComponentConcerns ReceivesEvents' => __DIR__ . '/..' . '/livewire/livewire/src/ComponentConcerns/ReceivesEvents.php',
>         'Livewire ComponentConcerns RendersLivewireComponents' => __DIR__ . '/..' . '/livewire/livewire/src/ComponentConcerns/RendersLivewireComponents.php',
>         'Livewire ComponentConcerns TracksRenderedChildren' => __DIR__ . '/..' . '/livewire/livewire/src/ComponentConcerns/TracksRenderedChildren.php',
>         'Livewire ComponentConcerns ValidatesInput' => __DIR__ . '/..' . '/livewire/livewire/src/ComponentConcerns/ValidatesInput.php',
>         'Livewire Connection ConnectionHandler' => __DIR__ . '/..' . '/livewire/livewire/src/Connection/ConnectionHandler.php',
>         'Livewire Controllers CanPretendToBeAFile' => __DIR__ . '/..' . '/livewire/livewire/src/Controllers/CanPretendToBeAFile.php',
>         'Livewire Controllers FilePreviewHandler' => __DIR__ . '/..' . '/livewire/livewire/src/Controllers/FilePreviewHandler.php',
>         'Livewire Controllers FileUploadHandler' => __DIR__ . '/..' . '/livewire/livewire/src/Controllers/FileUploadHandler.php',
>         'Livewire Controllers HttpConnectionHandler' => __DIR__ . '/..' . '/livewire/livewire/src/Controllers/HttpConnectionHandler.php',
>         'Livewire Controllers LivewireJavaScriptAssets' => __DIR__ . '/..' . '/livewire/livewire/src/Controllers/LivewireJavaScriptAssets.php',
>         'Livewire CreateBladeView' => __DIR__ . '/..' . '/livewire/livewire/src/CreateBladeView.php',
>         'Livewire DisableBrowserCache' => __DIR__ . '/..' . '/livewire/livewire/src/DisableBrowserCache.php',
>         'Livewire Event' => __DIR__ . '/..' . '/livewire/livewire/src/Event.php',
>         'Livewire Exceptions BypassViewHandler' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/BypassViewHandler.php',
>         'Livewire Exceptions CannotBindToModelDataWithoutValidationRuleException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/CannotBindToModelDataWithoutValidationRuleException.php',
>         'Livewire Exceptions CannotUseReservedLivewireComponentProperties' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/CannotUseReservedLivewireComponentProperties.php',
>         'Livewire Exceptions ComponentAttributeMissingOnDynamicComponentException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/ComponentAttributeMissingOnDynamicComponentException.php',
>         'Livewire Exceptions ComponentNotFoundException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/ComponentNotFoundException.php',
>         'Livewire Exceptions CorruptComponentPayloadException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/CorruptComponentPayloadException.php',
>         'Livewire Exceptions DirectlyCallingLifecycleHooksNotAllowedException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/DirectlyCallingLifecycleHooksNotAllowedException.php',
>         'Livewire Exceptions LivewirePageExpiredBecauseNewDeploymentHasSignificantEnoughChanges' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/LivewirePageExpiredBecauseNewDeploymentHasSignificantEnoughChanges.php',
>         'Livewire Exceptions MethodNotFoundException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/MethodNotFoundException.php',
>         'Livewire Exceptions MissingFileUploadsTraitException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/MissingFileUploadsTraitException.php',
>         'Livewire Exceptions MissingRulesException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/MissingRulesException.php',
>         'Livewire Exceptions NonPublicComponentMethodCall' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/NonPublicComponentMethodCall.php',
>         'Livewire Exceptions PropertyNotFoundException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/PropertyNotFoundException.php',
>         'Livewire Exceptions PublicPropertyNotFoundException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/PublicPropertyNotFoundException.php',
>         'Livewire Exceptions PublicPropertyTypeNotAllowedException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/PublicPropertyTypeNotAllowedException.php',
>         'Livewire Exceptions RootTagMissingFromViewException' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/RootTagMissingFromViewException.php',
>         'Livewire Exceptions S3DoesntSupportMultipleFileUploads' => __DIR__ . '/..' . '/livewire/livewire/src/Exceptions/S3DoesntSupportMultipleFileUploads.php',
>         'Livewire Features OptimizeRenderedDom' => __DIR__ . '/..' . '/livewire/livewire/src/Features/OptimizeRenderedDom.php',
>         'Livewire Features Placeholder' => __DIR__ . '/..' . '/livewire/livewire/src/Features/Placeholder.php',
>         'Livewire Features SupportActionReturns' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportActionReturns.php',
>         'Livewire Features SupportBootMethod' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportBootMethod.php',
>         'Livewire Features SupportBrowserHistory' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportBrowserHistory.php',
>         'Livewire Features SupportChildren' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportChildren.php',
>         'Livewire Features SupportCollections' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportCollections.php',
>         'Livewire Features SupportComponentTraits' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportComponentTraits.php',
>         'Livewire Features SupportDateTimes' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportDateTimes.php',
>         'Livewire Features SupportEvents' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportEvents.php',
>         'Livewire Features SupportFileDownloads' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportFileDownloads.php',
>         'Livewire Features SupportFileUploads' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportFileUploads.php',
>         'Livewire Features SupportLocales' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportLocales.php',
>         'Livewire Features SupportPostDeploymentInvalidation' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportPostDeploymentInvalidation.php',
>         'Livewire Features SupportRedirects' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportRedirects.php',
>         'Livewire Features SupportRootElementTracking' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportRootElementTracking.php',
>         'Livewire Features SupportStacks' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportStacks.php',
>         'Livewire Features SupportValidation' => __DIR__ . '/..' . '/livewire/livewire/src/Features/SupportValidation.php',
>         'Livewire FileUploadConfiguration' => __DIR__ . '/..' . '/livewire/livewire/src/FileUploadConfiguration.php',
>         'Livewire GenerateSignedUploadUrl' => __DIR__ . '/..' . '/livewire/livewire/src/GenerateSignedUploadUrl.php',
>         'Livewire HydrationMiddleware AddAttributesToRootTagOfHtml' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/AddAttributesToRootTagOfHtml.php',
>         'Livewire HydrationMiddleware CallHydrationHooks' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/CallHydrationHooks.php',
>         'Livewire HydrationMiddleware CallPropertyHydrationHooks' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/CallPropertyHydrationHooks.php',
>         'Livewire HydrationMiddleware HashDataPropertiesForDirtyDetection' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/HashDataPropertiesForDirtyDetection.php',
>         'Livewire HydrationMiddleware HydratePublicProperties' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/HydratePublicProperties.php',
>         'Livewire HydrationMiddleware HydrationMiddleware' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/HydrationMiddleware.php',
>         'Livewire HydrationMiddleware NormalizeComponentPropertiesForJavaScript' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/NormalizeComponentPropertiesForJavaScript.php',
>         'Livewire HydrationMiddleware NormalizeDataForJavaScript' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/NormalizeDataForJavaScript.php',
>         'Livewire HydrationMiddleware NormalizeServerMemoSansDataForJavaScript' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/NormalizeServerMemoSansDataForJavaScript.php',
>         'Livewire HydrationMiddleware PerformActionCalls' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/PerformActionCalls.php',
>         'Livewire HydrationMiddleware PerformDataBindingUpdates' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/PerformDataBindingUpdates.php',
>         'Livewire HydrationMiddleware PerformEventEmissions' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/PerformEventEmissions.php',
>         'Livewire HydrationMiddleware RenderView' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/RenderView.php',
>         'Livewire HydrationMiddleware SecureHydrationWithChecksum' => __DIR__ . '/..' . '/livewire/livewire/src/HydrationMiddleware/SecureHydrationWithChecksum.php',
>         'Livewire ImplicitRouteBinding' => __DIR__ . '/..' . '/livewire/livewire/src/ImplicitRouteBinding.php',
>         'Livewire ImplicitlyBoundMethod' => __DIR__ . '/..' . '/livewire/livewire/src/ImplicitlyBoundMethod.php',
>         'Livewire LifecycleManager' => __DIR__ . '/..' . '/livewire/livewire/src/LifecycleManager.php',
>         'Livewire Livewire' => __DIR__ . '/..' . '/livewire/livewire/src/Livewire.php',
>         'Livewire LivewireBladeDirectives' => __DIR__ . '/..' . '/livewire/livewire/src/LivewireBladeDirectives.php',
>         'Livewire LivewireComponentsFinder' => __DIR__ . '/..' . '/livewire/livewire/src/LivewireComponentsFinder.php',
>         'Livewire LivewireManager' => __DIR__ . '/..' . '/livewire/livewire/src/LivewireManager.php',
>         'Livewire LivewireServiceProvider' => __DIR__ . '/..' . '/livewire/livewire/src/LivewireServiceProvider.php',
>         'Livewire LivewireTagCompiler' => __DIR__ . '/..' . '/livewire/livewire/src/LivewireTagCompiler.php',
>         'Livewire LivewireViewCompilerEngine' => __DIR__ . '/..' . '/livewire/livewire/src/LivewireViewCompilerEngine.php',
>         'Livewire Macros DuskBrowserMacros' => __DIR__ . '/..' . '/livewire/livewire/src/Macros/DuskBrowserMacros.php',
>         'Livewire Macros ViewMacros' => __DIR__ . '/..' . '/livewire/livewire/src/Macros/ViewMacros.php',
>         'Livewire ObjectPrybar' => __DIR__ . '/..' . '/livewire/livewire/src/ObjectPrybar.php',
>         'Livewire Redirector' => __DIR__ . '/..' . '/livewire/livewire/src/Redirector.php',
>         'Livewire Request' => __DIR__ . '/..' . '/livewire/livewire/src/Request.php',
>         'Livewire Response' => __DIR__ . '/..' . '/livewire/livewire/src/Response.php',
>         'Livewire TemporaryUploadedFile' => __DIR__ . '/..' . '/livewire/livewire/src/TemporaryUploadedFile.php',
>         'Livewire Testing Concerns HasFunLittleUtilities' => __DIR__ . '/..' . '/livewire/livewire/src/Testing/Concerns/HasFunLittleUtilities.php',
>         'Livewire Testing Concerns MakesAssertions' => __DIR__ . '/..' . '/livewire/livewire/src/Testing/Concerns/MakesAssertions.php',
>         'Livewire Testing Concerns MakesCallsToComponent' => __DIR__ . '/..' . '/livewire/livewire/src/Testing/Concerns/MakesCallsToComponent.php',
>         'Livewire Testing MakesHttpRequestsWrapper' => __DIR__ . '/..' . '/livewire/livewire/src/Testing/MakesHttpRequestsWrapper.php',
>         'Livewire Testing TestableLivewire' => __DIR__ . '/..' . '/livewire/livewire/src/Testing/TestableLivewire.php',
>         'Livewire WireDirective' => __DIR__ . '/..' . '/livewire/livewire/src/WireDirective.php',
>         'Livewire Wireable' => __DIR__ . '/..' . '/livewire/livewire/src/Wireable.php',
>         'Livewire WithFileUploads' => __DIR__ . '/..' . '/livewire/livewire/src/WithFileUploads.php',
>         'Livewire WithPagination' => __DIR__ . '/..' . '/livewire/livewire/src/WithPagination.php',

Changes

<         'Tightenco Ziggy BladeRouteGenerator' => __DIR__ . '/..' . '/tightenco/ziggy/src/BladeRouteGenerator.php',
<         'Tightenco Ziggy CommandRouteGenerator' => __DIR__ . '/..' . '/tightenco/ziggy/src/CommandRouteGenerator.php',
<         'Tightenco Ziggy Ziggy' => __DIR__ . '/..' . '/tightenco/ziggy/src/Ziggy.php',
<         'Tightenco Ziggy ZiggyServiceProvider' => __DIR__ . '/..' . '/tightenco/ziggy/src/ZiggyServiceProvider.php',

Changes

<             $loader->prefixLengthsPsr4 = ComposerStaticInit1a366ea8c9013f37377c59393191f427::$prefixLengthsPsr4;
<             $loader->prefixDirsPsr4 = ComposerStaticInit1a366ea8c9013f37377c59393191f427::$prefixDirsPsr4;
<             $loader->prefixesPsr0 = ComposerStaticInit1a366ea8c9013f37377c59393191f427::$prefixesPsr0;
<             $loader->classMap = ComposerStaticInit1a366ea8c9013f37377c59393191f427::$classMap;
---
>             $loader->prefixLengthsPsr4 = ComposerStaticInitf2da6e83b085fd96649a1eced6ba9cbb::$prefixLengthsPsr4;
>             $loader->prefixDirsPsr4 = ComposerStaticInitf2da6e83b085fd96649a1eced6ba9cbb::$prefixDirsPsr4;
>             $loader->prefixesPsr0 = ComposerStaticInitf2da6e83b085fd96649a1eced6ba9cbb::$prefixesPsr0;
>             $loader->classMap = ComposerStaticInitf2da6e83b085fd96649a1eced6ba9cbb::$classMap;
## vendor/composer/installed.json

Changes

<             "name": "inertiajs/inertia-laravel",
<             "version": "v0.5.2",
<             "version_normalized": "0.5.2.0",
<             "source": {
<                 "type": "git",
<                 "url": "https://github.com/inertiajs/inertia-laravel.git",
<                 "reference": "9c8c4201435aa0c11cb832242cf4c1b01bd8ef32"
<             },
<             "dist": {
<                 "type": "zip",
<                 "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/9c8c4201435aa0c11cb832242cf4c1b01bd8ef32",
<                 "reference": "9c8c4201435aa0c11cb832242cf4c1b01bd8ef32",
<                 "shasum": ""
<             },
<             "require": {
<                 "ext-json": "*",
<                 "laravel/framework": "^6.0|^7.0|^8.74|^9.0",
<                 "php": "^7.2|~8.0.0|~8.1.0"
<             },
<             "require-dev": {
<                 "mockery/mockery": "^1.3.3",
<                 "orchestra/testbench": "^4.0|^5.0|^6.4|^7.0",
<                 "phpunit/phpunit": "^8.0|^9.5.8",
<                 "roave/security-advisories": "dev-master"
<             },
<             "time": "2022-01-12T16:18:26+00:00",
<             "type": "library",
<             "extra": {
<                 "laravel": {
<                     "providers": [
<                         "Inertia ServiceProvider"
<                     ]
<                 }
<             },
<             "installation-source": "dist",
<             "autoload": {
<                 "psr-4": {
<                     "Inertia ": "src"
<                 },
<                 "files": [
<                     "./helpers.php"
<                 ]
<             },
<             "notification-url": "https://packagist.org/downloads/",
<             "license": [
<                 "MIT"
<             ],
<             "authors": [
<                 {
<                     "name": "Jonathan Reinink",
<                     "email": "jonathan@reinink.ca",
<                     "homepage": "https://reinink.ca"
<                 }
<             ],
<             "description": "The Laravel adapter for Inertia.js.",
<             "keywords": [
<                 "inertia",
<                 "laravel"
<             ],
<             "support": {
<                 "issues": "https://github.com/inertiajs/inertia-laravel/issues",
<                 "source": "https://github.com/inertiajs/inertia-laravel/tree/v0.5.2"
<             },
<             "funding": [
<                 {
<                     "url": "https://github.com/reinink",
<                     "type": "github"
<                 }
<             ],
<             "install-path": "../inertiajs/inertia-laravel"
<         },
<         {

Changes

>             "name": "livewire/livewire",
>             "version": "v2.9.0",
>             "version_normalized": "2.9.0.0",
>             "source": {
>                 "type": "git",
>                 "url": "https://github.com/livewire/livewire.git",
>                 "reference": "e117c78f9a4b19edb294b5b576138fd1f896925a"
>             },
>             "dist": {
>                 "type": "zip",
>                 "url": "https://api.github.com/repos/livewire/livewire/zipball/e117c78f9a4b19edb294b5b576138fd1f896925a",
>                 "reference": "e117c78f9a4b19edb294b5b576138fd1f896925a",
>                 "shasum": ""
>             },
>             "require": {
>                 "illuminate/database": "^7.0|^8.0",
>                 "illuminate/support": "^7.0|^8.0",
>                 "illuminate/validation": "^7.0|^8.0",
>                 "php": "^7.2.5|^8.0",
>                 "symfony/http-kernel": "^5.0"
>             },
>             "require-dev": {
>                 "calebporzio/sushi": "^2.1",
>                 "laravel/framework": "^7.0|^8.0",
>                 "mockery/mockery": "^1.3.1",
>                 "orchestra/testbench": "^5.0|^6.0",
>                 "orchestra/testbench-dusk": "^5.2|^6.0",
>                 "phpunit/phpunit": "^8.4|^9.0",
>                 "psy/psysh": "@stable"
>             },
>             "time": "2022-01-13T20:07:05+00:00",
>             "type": "library",
>             "extra": {
>                 "laravel": {
>                     "providers": [
>                         "Livewire LivewireServiceProvider"
>                     ],
>                     "aliases": {
>                         "Livewire": "Livewire Livewire"
>                     }
>                 }
>             },
>             "installation-source": "dist",
>             "autoload": {
>                 "files": [
>                     "src/helpers.php"
>                 ],
>                 "psr-4": {
>                     "Livewire ": "src/"
>                 }
>             },
>             "notification-url": "https://packagist.org/downloads/",
>             "license": [
>                 "MIT"
>             ],
>             "authors": [
>                 {
>                     "name": "Caleb Porzio",
>                     "email": "calebporzio@gmail.com"
>                 }
>             ],
>             "description": "A front-end framework for Laravel.",
>             "support": {
>                 "issues": "https://github.com/livewire/livewire/issues",
>                 "source": "https://github.com/livewire/livewire/tree/v2.9.0"
>             },
>             "funding": [
>                 {
>                     "url": "https://github.com/livewire",
>                     "type": "github"
>                 }
>             ],
>             "install-path": "../livewire/livewire"
>         },
>         {

Changes

<             "name": "tightenco/ziggy",
<             "version": "v1.4.2",
<             "version_normalized": "1.4.2.0",
<             "source": {
<                 "type": "git",
<                 "url": "https://github.com/tighten/ziggy.git",
<                 "reference": "620c135281062b9f6b53a75b07f99a4339267277"
<             },
<             "dist": {
<                 "type": "zip",
<                 "url": "https://api.github.com/repos/tighten/ziggy/zipball/620c135281062b9f6b53a75b07f99a4339267277",
<                 "reference": "620c135281062b9f6b53a75b07f99a4339267277",
<                 "shasum": ""
<             },
<             "require": {
<                 "laravel/framework": ">=5.4@dev"
<             },
<             "require-dev": {
<                 "orchestra/testbench": "^6.0",
<                 "phpunit/phpunit": "^9.2"
<             },
<             "time": "2021-10-01T13:55:26+00:00",
<             "type": "library",
<             "extra": {
<                 "laravel": {
<                     "providers": [
<                         "Tightenco Ziggy ZiggyServiceProvider"
<                     ]
<                 }
<             },
<             "installation-source": "dist",
<             "autoload": {
<                 "psr-4": {
<                     "Tightenco Ziggy ": "src/"
<                 }
<             },
<             "notification-url": "https://packagist.org/downloads/",
<             "license": [
<                 "MIT"
<             ],
<             "authors": [
<                 {
<                     "name": "Daniel Coulbourne",
<                     "email": "daniel@tighten.co"
<                 },
<                 {
<                     "name": "Jake Bathman",
<                     "email": "jake@tighten.co"
<                 },
<                 {
<                     "name": "Jacob Baker-Kretzmar",
<                     "email": "jacob@tighten.co"
<                 }
<             ],
<             "description": "Generates a Blade directive exporting all of your named Laravel routes. Also provides a nice route() helper function in JavaScript.",
<             "homepage": "https://github.com/tighten/ziggy",
<             "keywords": [
<                 "Ziggy",
<                 "javascript",
<                 "laravel",
<                 "routes"
<             ],
<             "support": {
<                 "issues": "https://github.com/tighten/ziggy/issues",
<                 "source": "https://github.com/tighten/ziggy/tree/v1.4.2"
<             },
<             "install-path": "../tightenco/ziggy"
<         },
<         {
## vendor/composer/installed.php

Changes

<         'inertiajs/inertia-laravel' => array(
<             'pretty_version' => 'v0.5.2',
<             'version' => '0.5.2.0',
<             'type' => 'library',
<             'install_path' => __DIR__ . '/../inertiajs/inertia-laravel',
<             'aliases' => array(),
<             'reference' => '9c8c4201435aa0c11cb832242cf4c1b01bd8ef32',
<             'dev_requirement' => false,
<         ),

Changes

>         'livewire/livewire' => array(
>             'pretty_version' => 'v2.9.0',
>             'version' => '2.9.0.0',
>             'type' => 'library',
>             'install_path' => __DIR__ . '/../livewire/livewire',
>             'aliases' => array(),
>             'reference' => 'e117c78f9a4b19edb294b5b576138fd1f896925a',
>             'dev_requirement' => false,
>         ),

Changes

<         'tightenco/ziggy' => array(
<             'pretty_version' => 'v1.4.2',
<             'version' => '1.4.2.0',
<             'type' => 'library',
<             'install_path' => __DIR__ . '/../tightenco/ziggy',
<             'aliases' => array(),
<             'reference' => '620c135281062b9f6b53a75b07f99a4339267277',
<             'dev_requirement' => false,
<         ),

## Only invendor: inertiajs

## Only inlaravel-starter-jetstream-livewire/vendor: livewire

## Only invendor: tightenco

## Only inlaravel-starter-jetstream-inertia: webpack.config.js

webpack.mix.js

Changes

< mix.js('resources/js/app.js', 'public/js').vue()
---
> mix.js('resources/js/app.js', 'public/js')

Changes

<     ])
<     .webpackConfig(require('./webpack.config'));
---
>     ]);
Laravel Toolbox

Laravel | Tipps und Tricks

Starter

Create Laravel Starter with basic functionalities

laravel new --jet --stack livewire --teams app

Views

Extend the file resources/views/navigation-menu.blade.php

<!-- Navigation Links -->
<div class="hidden space-x-8 sm:-my-px sm:ml-10 sm:flex">
   <x-jet-nav-link href="{{ route('dashboard') }}"
                   :active="request()->routeIs('dashboard')">
      { __('Dashboard') }}
   </x-jet-nav-link>
</div>

<div class="hidden space-x-8 sm:-my-px sm:ml-10 sm:flex">
   <x-jet-nav-link href="{{ route('particles') }}"
                   :active="request()->routeIs('particles')">
      {{ __('Particles') }}
   </x-jet-nav-link>
</div>

Display Laravel and PHP Version

<div>
    Laravel v{{ Illuminate\Foundation\Application::VERSION }}
    (PHP v{{ PHP_VERSION }})
</div>

Create new View and Component

php artisan make:component NewComponent

Creates

app/View/Components/NewComponent.php

and

resources/views/components/new-component.blade.php

Command Line

Create new command make:view

Original source is here

php artisan make:command MakeViewCommand

Create the following file

app/Console/Commands/MakeViewCommand.php

Edit the file and overwrite code with the following

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use File;

class MakeViewCommand extends Command
{
    protected $signature = 'make:view {view}';
    protected $description = 'Create a new blade template.';
    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $view = $this->argument('view');
        $path = $this->viewPath($view);

        $this->createDir($path);

        if (File::exists($path))
        {
            $this->error("File {$path} already exists!");
            return;
        }

        File::put($path, $path);

        $this->info("File {$path} created.");
    }

    public function viewPath($view)
    {
        $view = str_replace('.', '/', $view) . '.blade.php';

        return "resources/views/{$view}";
    }

    public function createDir($path)
    {
        $dir = dirname($path);

        if (!file_exists($dir))
        {
            mkdir($dir, 0777, true);
        }
    }

}

Database

SQLite

Create an empty SQLite Database

sqlite3 database.sqlite "create table t(f int); drop table t;"

https://laravel-news.com/ https://laravel-news.com/learning-laravel-in-2021 https://laravel.com/docs/8.x

https://laravel-livewire.com/screencasts/installation

https://www.larashout.com/

Tutorial

https://www.tutsmake.com/category/laravel-tutorial/ https://www.tutsmake.com/laravel-interview-questions-answers-for-1235-year-experience/ https://learn2torials.com/category/laravel

https://kinsta.com/blog/laravel-tutorial/#6-best-free-laravel-tutorial-sites

Database

https://eloquentbyexample.com

https://laravel.com/docs/8.x/eloquent#introduction

Blade

https://www.a-coding-project.de/ratgeber/laravel/blade

Blog erstellen

https://www.flowkl.com/tutorial/web-development/simple-blog-application-in-laravel-7/

https://www.section.io/engineering-education/laravel-beginners-guide-blogpost/

https://medium.com/@dinyangetoh/how-to-build-a-blog-with-laravel-9f735d1f3116

https://medium.com/@dinyangetoh/how-to-build-a-blog-with-laravel-9f735d1f3116

Laravel | Tipps und Tricks | Bootstrap verwenden

Create and Prepare your Laravel Project

Create Laravel App

Installing a fresh Laravel project by running the following steps:

Create a new applaravel new --stack livewire --jet --teams app
In the file .env and change DB Connection to sqliteDB_CONNECTION=sqlite
Create an empty file database/database.sqlite
Start DB Migrationphp artisan migrate
Start Laravelphp artisan serve

Create Page for Bootstrap Demo

Create a file resources/views/using-bootstrap.blade.php with the following content:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Laravel: Using Bootstrap from Local</title>
</head>

<body class="antialiased">
   <main>
      <div class="container py-4">
         <header class="pb-3 mb-4 border-bottom">
            <a href="/" 
               class="d-flex align-items-center text-dark text-decoration-none">
               <title>Bootstrap</title>
               <span class="fs-4">Bootstrap example</span>
            </a>
         </header>

         <div class="p-5 mb-4 bg-light rounded-3">
            <div class="container-fluid py-5">
               <h1 class="display-5 fw-bold">
                  Using Bootstrap in Laravel Projects
               </h1>
               <p class="col-md-8 fs-4">
                  It's very easy to add the Bootstrap Framework 
                  to your Laravel Project.
               </p>
               <button class="btn btn-primary btn-lg" type="button">
                  See how...
               </button>
            </div>
         </div>
      </div>
   </main>
</body>
</html>

Add the link /using-bootstrap to your App by adding this to route/web.php

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

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

If you open http://127.0.0.1:8000/using-bootstrap in the Browser, you the demo page but with no bootstrap styling.

Adding Bootstrap to your Project

You have three possibilities to add Bootstrap into your Larval Project

Methode 1: Adding Bootstrap by a Link to CDN

Using CDN (Content delivery network) is quite easy and simple for beginners. CDN is a network of servers providing the source files for almost every library used in front-end development.

We need the references for bootstrap.min.css and bootstrap.bundle.min.js

You add Bootstrap by inserting the following code snippets in your main Laravel Page.

We will use the file resources/views/using-bootstrap.blade.php

<link            
    href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
    rel="stylesheet"
    integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
    crossorigin="anonymous"
>
<script  src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
    integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
    crossorigin="anonymous">
</script>

The final file looks like this:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Boostrap 5</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
</head>
<body>
    <div class="container">
        <div class="alert alert-success mt-5" role="alert">
            Boostrap 5 is working!
        </div>    
    </div>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script>
</body>
</html>

Methode 2: Adding Bootstrap Public Folder

Download Bootstrap 5 file and put the files into the folder app/public/assets/vendor/bootstrap/5.2.0

Add the following code snippets to your Laravel Page:

<link href="{{ asset('assets/vendor/bootstrap/5.2.0/css/bootstrap.min.css') }}" rel="stylesheet">
<script src="{{ asset('assets/vendor/bootstrap/5.2.0/js/bootstrap.min.js') }}"></script>

The final files look like this:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Boostrap 5</title>
    <link rel="stylesheet" href={{ asset('css/bootstrap.min.css') }}>
</head>
<body>
    <div class="container">
        <div class="alert alert-success mt-5" role="alert">
            Boostrap 5 is working!
        </div>    
    </div>
    <script src="{{ asset('js/bootstrap.min.js') }}"></script>
</body>
</html>

Methode 3: Adding Bootstrap 5 using Laravel Mix

In Laravel, all Frontend Modules are handles with Laravel Mix. This is an elegant wrapper around Webpack, a Package manager for installing and managing node modules.

To use Mix, you need to install NodeJS and NPM.

After this, install all required modules of your starter project

npm install

If you can see node_modules folder, this means npm is working.

Now we need to install bootstrap and the required modules

npm install bootstrap --save-dev 
npm install @popperjs/core --save-dev

You will find the new packages in package.json

    "devDependencies": {
        "@popperjs/core": "^2.11.5",
        "@tailwindcss/forms": "^0.4.0",
        "@tailwindcss/typography": "^0.5.0",
        "alpinejs": "^3.0.6",
        "axios": "^0.25",
        "bootstrap": "^5.1.3",
        "laravel-mix": "^6.0.6",
        "lodash": "^4.17.19",
        "postcss": "^8.1.14",
        "postcss-import": "^14.0.1",
        "tailwindcss": "^3.0.0"
    }

Next, add the following line to resources/css/app.css:

@import "bootstrap";

Add the following line to the file resources/js/bootstrap.js:

window._ = require("lodash");
import "bootstrap";

Run the following command to build the frontend files (css and js)

npm run development

You done. See the result here: http://127.0.0.1:8000/using-bootstrap

Using Bootstrap

With the Bootstrap Framework installed, now we can style our Pages. An overview of what you can do could be found in the Documentation or using the Examples.

We will work with the Examples, so download all examples to the folder resources/views/bootstrap

With the Commandline and PowerShell, you could do this: Change to the folder and download the Archive with the examples

❯ Set-Location resources\views
❯ Invoke-WebRequest https://github.com/twbs/bootstrap/releases/download/v5.2.0-beta1/bootstrap-5.2.0-beta1-examples.zip -O bootstrap.zip

Extract the archive, don’t forget the trailing dot ‘.’

❯ Expand-Archive .\bootstrap.zip .

Rename the created folder

❯ Rename-Item .\bootstrap-5.2.0-beta1-examples\ bootstrap
❯ Remove-Item bootstrap.zip

Now, we have all examples in the folder resources/views/bootstrap and we are ready to play with them:

Modify the album example to use with Laravel

Modify the /using-bootstrap (resources/views/using-bootstrap.blade.php) page

Add a sample text and a link to out Album Page

<div class="p-5 mb-4 bg-light rounded-3">
    <div class="container-fluid py-5">
    ... Keep the original content
    </div>

    <div class="container-fluid py-5">
        <p class="col-md-8 fs-4">
            Just start with an <a href="bootstrap/album">example</a>
        </p>
    </div>
</div>

Modify routes/web.php to include a link to /bootstrap/album

Add the following lines to route/web.php

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

Modify the Album Page

Rename and move the file resources/views/bootstrap/album/index.html to resources/views/bootstrap/album.blade.php.

Please note: We also changed the folder of the file. All examples’ files will be placed directly under the folder resources/views/bootstrap

You can do this for all files with the following PowerShell Script:

Get-ChildItem . index.html -recurse                        | `





Addon: Script to modify all examples files

Remove-Item _web.php

Remove-Item _links.php
Add-Content _links.php "<div class='list-group w-auto'>"

function Add-Link($header, $link) {

Add-Content _links.php ('<a href="' + $link + '" class="list-group-item list-group-item-action d-flex gap-3 py-3" aria-current="true">')
Add-Content _links.php '<img src="https://github.com/twbs.png" alt="twbs" width="32" height="32" class="rounded-circle flex-shrink-0">'
Add-Content _links.php '<div class="d-flex gap-2 w-100 justify-content-between">'
Add-Content _links.php ('<div><h6 class="mb-0">' + $header + '</h6></div>')
Add-Content _links.php '<p class="mb-0 opacity-75">Another examples></p>'
Add-Content _links.php '</div>'
Add-Content _links.php '<small class="opacity-50 text-nowrap">&nbsp;</small>'
Add-Content _links.php '</a>'

}

 $LINK_OLD_JS="../assets/dist/js/bootstrap.bundle.min.js"
$LINK_OLD_CSS="../assets/dist/css/bootstrap.min.css"
 
 $LINK_NEW_JS="{{ asset('js/app.js')   }}"
$LINK_NEW_CSS="{{ asset('css/app.css') }}"


Get-ChildItem . index.html -recurse                        `
|
|
    (Get-Content $_\index.html)         `
    |
    |
    | Set-Content  $_".blade.php"

    Add-Content _web.php "Route::get('/bootstrap/$_', function () { return view('bootstrap/$_'); });"

    Write-Host "Add links to example $_"
    Add-Link $_ "bootstrap/$_"
}

Add-Content _links.php "</div>"

FAQ

Errors and Problems

Build Modules with npm run dev shows up a warning

To see more information about the warning, add the following to the file webpack.mix.js after the first mix.js( ...

mix.webpackConfig({
    stats: {
        children: true,
    },
});

Then, run npm run dev again.

Laravel | Erstellen einer Beispielanwendung unter WSL

Voraussetzung

Voraussetzung für die Verwendung von Laravel ist eine lauffähige Entwicklungsumgebung.

Der Aufbau einer solchen Umgebung wird hier beschrieben.

Installation über WSL

WSL starten

WSL ist das Windows Subsystem for Linux 2 (WSL2)

> wsl
/mnt/d/Websites
$

Installation einer Beispielanwendung

curl -s https://laravel.build/example-app | bash

Individuelle Anpassung

Beim Aufruf kann die zu verwendende Dienste mit angegeben werden. Mögliche Werte sind:

mysql, pgsql, mariadb, redis, memcached, meilisearch, selenium, and mailhog

Die Standardwerte sind:

mysql, redis, meilisearch, mailhog und selenium
curl -s "https://laravel.build/example-app?with=mysql,redis" | bash

Installation mit Standardwerten

curl -s https://laravel.build/example-app | bash
$ cd example-app $ ./vendor/bin/sail up

Zugriff auf die Anwendung über http://localhost

Laravel | Einstieg und erste Schritte

TL;DR

Der Code für die in diesem Post erstelle Anwendung liegt hier.

Laravel Ökosystem

Laravel Breeze

Laravel Breeze ist eine minimale, einfache Implementierung aller Authentifizierungsfunktionen von Laravel, einschließlich Anmeldung, Registrierung, Paßwortzurücksetzung, E-Mail-Bestätigung und Paßwortbestätigung.

Die Standardansichtsebene von Laravel Breeze besteht aus einfachen Blade-Vorlagen, die mit Tailwind CSS gestaltet sind. Breeze bietet einen wunderbaren Ausgangspunkt für den Beginn einer frischen Laravel-Anwendung.

Breeze & Inertia

Laravel Breeze bietet auch eine Frontend-Implementierung von Inertia.js die von Vue oder React unterstützt wird.

Jetstream bietet ein schön gestaltetes Anwendungsgerüst für Laravel und umfasst Anmeldung, Registrierung, E-Mail-Verifizierung, Zwei-Faktor-Authentifizierung, Sitzungsverwaltung, API-Unterstützung über Laravel Sanctum und optionales Teammanagement.

Jetstream wurde mit Tailwind CSS entwickelt und bietet Ihre Wahl zwischen Livewire oder Inertia.js-gesteuertem Frontend-Gerüst.

Hinweis:

Während Laravel Breeze einen einfachen und minimalen Ausgangspunkt für die Erstellung einer Laravel-Anwendung bietet, erweitert Jetstream diese Funktionalität mit robusteren Funktionen und zusätzlichen Frontend-Technologie-Stacks.

Für Laravel-Neulinge empfehlen wir, sich mit Laravel Breeze vertraut zu machen, bevor sie Laravel Jetstream abschließen.

Jetstream

Jetstream bietet ein wunderschön gestaltetes Anwendungsgerüst für Laravel und umfaßt Anmeldung, Registrierung, E-Mail-Verifizierung, Zwei-Faktor-Authentifizierung, Sitzungsverwaltung, API-Unterstützung über Laravel Sanctum und optionales Teammanagement.

Jetstream wurde mit Tailwind CSS entwickelt und bietet Ihre Wahl zwischen Livewire – oder  Inertia.js-gesteuertem Frontend-Scaffolding.

Fortify

Laravel Fortify ist eine Frontend-agnostische Authentifizierungs-Backend-Implementierung für Laravel.

Fortify registriert die Routen und Controller, die zur Implementierung aller Authentifizierungsfunktionen von Laravel erforderlich sind, einschließlich Anmeldung, Registrierung, Zurücksetzen des Paßworts, E-Mail-Verifizierung und mehr.

Nach der Installation von Fortify können Sie den route:list Artisan-Befehl ausführen, um die von Fortify registrierten Routen anzuzeigen.

Da Fortify keine eigene Benutzeroberfläche bereitstellt, soll es mit Ihrer eigenen Benutzeroberfläche gekoppelt werden, die Anfragen an die registrierten Routen stellt. Wir werden im Rest dieser Dokumentation genau besprechen, wie Anfragen an diese Routen gestellt werden.

Voraussetzung

Voraussetzung für die Verwendung von Laravel ist eine lauffähige Entwicklungsumgebung. Der Aufbau einer solchen Umgebung wird hier beschrieben.

Installation mit Hilfe von Composer

Wenn auf Ihrem Computer bereits PHP und Composer installiert sind, können Sie ein neues Laravel-Projekt erstellen, indem Sie Composer direkt verwenden.

composer create-project laravel/laravel app

cd app

Nachdem die Anwendung erstellt wurde, können Sie den lokalen Entwicklungsserver von Laravel mit dem nachfolgenden Befehl starten:

php artisan serve

Installation mit Hilfe des Laravel Installer

Laravel Installer

Am einfachsten wird eine neuen Anwendung installiert mit Hilfe der Laravel CLI laravel. Sie installieren diese über

composer global require laravel/installer

Der Laravel Installer verwendet für die neue Anwendung die vorgegebenen Standardeinstellungen (z., B. Registrierungsmöglichkeit ohne Mailbestätigung).

Hinweis: Im Laufe diese Posts werden Sie diese anpassen.

Erstellen der Anwendung

laravel new app --stack=livewire --jet --teams
Anwendung erstellen

Konfiguration der Datenbank

Die Konfiguration der Datenbank erfolgt in der bereits vorhandenen Datei .env.

Nach der Installation finden Sie dort die folgenden Einträge für eine MySQL Datenbankanbindung:

Standardeinstellungen für die Datenbankverbindung

Wir wollen uns hier auf die Einrichten der Laravel Anwendung beschränken und nicht noch zusätzlich die Installation einer MySQL Datenbank beschreiben. Hierzu finden Sie mehr Informationen an anderer Stelle.

Datenbank SQLite verwenden

Ändern Sie den nachfolgenden Eintrag (im obigen Beispiel in Zeile 10):

DB_CONNECTION=sqlite
sqlite als Datenbank einstellen

Leere Datenbankdatei erstellen

Im nächsten Schritt erstellen wir eine leeren Datenbank, indem wir im Ordner database eine Datei database.sqlite erstellen

Initiale leere Datenbank-Datei erstellen

Hinweis: Sie können eine leere Datei auch über die Kommandozeile erstellen. Voraussetzung ist das Tool sqlite3 (hier geht’s zum Download)

sqlite3 database\database.sqlite "create table a(f int); drop table a;"

Eine leere SQlite-Datenbank können sie auch mit diesem Kommando erstellen:

touch database/database.sqlite

Tabellen erstellen

Im letzten Schritt werden in der Datenbank die für Laravel notwendigen Tabellen eingerichtet:

php artisan migrate
Migration der Tabellen durchführen

Hinweis: Die vorhandenen Tabellen können Sie sich über die Kommandozeile anzeigen lassen:

sqlite3.exe .\database\database.sqlite ".tables"
Vorhandene Tabellen in der Datenbank

Installation und Konfiguration des Frontend

Um mit dem Frontend arbeiten zu können müssen zu ersten die notwendigen Komponenten installiert und das Frontend erstellt werden:

npm install
npm run dev

Anzeigen der Anwendung

Die grundlegende Installation und Konfiguration ist abgeschlossen. Starten Sie die Anwendung durch das nachfolgende Kommando:

php artisan serve
Lokalen Webserver starten

Öffnen Sie die Anwendung im Browser über den Link http://127.0.0.1:8000

Startseite der Anwendung

Anmeldung und Authentifizierung

Die erstelle Laravel-Anwendung enthält bereits die Funktionalität, das sich Benutzer Registrieren und Anmelden können. Hierzu finden Sie auf der Startseite rechts oben entsprechende Links.

Mit den verwendeten Standardeinstellungen reicht zum Einrichten des neuen Benutzer der Name, die E-Mail und das Passwort.

Um eine höhere Sicherheit zu erreichen, werden diese Einstellungen so geändert, das einen Bestätigungsmail an den Benutzer gesendet wird. Erst durch den Klick auf den darin enthaltenen Bestätigungslink wird die Einrichtung des Benutzers abgeschlossen.

E-Mail Verification einrichten

Das Einrichten dieser E-Mail Verification erfolgt in mehreren Schritten:

Aktivieren des Features emailVerification in der Datei config/fortify.php

Einrichten der emailVerification

use Illuminate\Contracts\Auth\MustVerifyEmail;

Erweitern des Klassendefinition im Benutzermodels app/Models/User.psp

class User extends Authenticatable implements MustVerifyEmail
Einrichten der emailVerification

Festlegen der E-Mail Konfiguration

Damit Laravel eine E-Mail versenden kann wird der Zugang zu einem E-Mail Server verwendet. Hier benötigen wir die Zugangsdaten für den SMTP-Versand.

Festgelegt werden diese Parameter wieder in der Datei .env:

Mailkonfiguration

Die entsprechenden Werte hängen vom verwendeten Mailserver ab.

Zuerst müssen Sie bei ihrem Provider ein Mailkonto einrichten (Benutzer und Passwort). Testen Sie am besten diese Daten über den von ihrem Provider bereitgestellten Webmailer.

Die weiteren Werte (Port, Protokoll) entnehmen Sie der Dokumentation ihres Providers.

Nachfolgend zwei Beispiele:

ProviderStratoUnited Domains
MAIL_MAILERsmtpsmtp
MAIL_HOSTsmtp.strato.desmtps.udag.de
MAIL_PORT587587
MAIL_ENCRYPTIONtlstls
Beispiele für die E-Mail-Konfiguration

Starten Sie die Anwendung neu und richten Sie einen weiteren Benutzer ein

php artisan serve
Lokalen Webserver starten

Registrierung durchführen

Starten Sie die Registrierung über den Link Register auf der Startseite.

Geben Sie die notwendigen Benutzerdaten ein. Bestätigen Sie ebenfalls die Terms of Services, falls diese aktiviert sind.

Bei erfolgreichen Versand der Bestätigungsmail erscheint diese Anzeige. Sie erhalten ebenfalls eine Bestätigungsmail an die verwendete E-Mail-Adresse.

Öffnen Sie die E-Mail und klicken Sie auf den Bestätigungslink. Achten Sie darauf, das der Link im gleichen Browser geöffnet wird, mit dem Sie die Registrierung durchgeführt haben.

Alternativ kopieren Sie einfach den Link, wechseln wieder zurück in das Registrierungsfenster und fügen den kopierten Link ein.

Danach befinden Sie sich auf dem Dashboard der Anwendung. Die Registrierung hat somit funktioniert.

Mögliche Konfigurationsfehler

E-Mail Server ist falsch

Fehlermeldung: Der angegebene Host ist unbekannt

Port ist falsch

Fehlermeldung: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte

Benutzername oder Passwort sind falsch

Fehlermeldung: Authentication failed: wrong user/password

Anpassung der Jetstream-Komponenten

Die erstelle Laravel-Jetstream Anwendung beinhaltet bereits “von Haus aus” einen großen Funktionsumfang. Jede einzelnen Funktionalität wird in den meisten Fällen durch mindestens zwei Dateien realisiert:

  • eine PHP-Klasse, welche die Funktionalität umsetzt (Programmcode)
  • eine Blade-Template, das die Ausgabe (Benutzersicht, View) umsetzt

Die Views werden z. B in dem nachfolgendem Ordner gespeichert:

vendor\laravel\jetstream\resources\views

Um diese Views innerhalb unserer Anwendung anpassen zu können, müssen sie an einer anderen Stelle gespeichert werden. Sonst werden unsere Änderungen z. B. nach jedem Update wieder gelöscht.

Wie kopieren diese durch den nachfolgenden Befehl:

php artisan vendor:publish --tag=jetstream-views

Die Kopien finden Sie im Ordner

resources\views\vendor\jetstream

Livewire Views

php artisan livewire:publish

Dadurch werden die nachfolgenden Dateien und Ordner erstellt:

config/livewire.php public/vendor/

config/livewire.php
public/vendor/livewire/livewire.js
public/vendor/livewire/livewire.js.map
public/vendor/livewire/manifest.json
resources/views/vendor/livewire/bootstrap.blade.php
resources/views/vendor/livewire/simple-bootstrap.blade.php
resources/views/vendor/livewire/simple-tailwind.blade.php
resources/views/vendor/livewire/tailwind.blade.php

Weitere Anpassungen

Terms of Services aktivieren

Aktivieren Sie dazu das Feature termsAndPrivacyPolicy in der Datei config/jetstream.php

Dadurch sehen sie im Registrierungsdialog ein zusätzliches Optionsfeld

Ändern der Sprache

Bearbeiten Sie in der Datei config/app.php die Einstellung locale. Ändern Sie den Wert auf 'de'.

Nach einem Neustart der Anwendung werden aber weiterhin die englischen Texte angezeigt.

Die Ursache liegt an der nicht vorhandenen deutschen Übersetzung der verwendeten Texte. Prüfen Sie einfach den Ordner mit den vorhandenen Übersetzungen: resources/lang

Es gibt nur einen Unterordner en für die englischen Texte:

Zusätzlich zu den Übersetzungen muss noch ein weiterer Schritt erfolgen. Um ihre Anwendung komplett auf Mehrsprachlichkeit umzustellen dürfen keine Texte direkt angegeben werden.

Betrachten wir hierzu die Startseite, speziell die Links in der rechten oberen Ecke:

Der View für die Startseite wird in der Datei resources/views/welcome.blade.php definiert:

Wir sehen, das hier der Text direkt in englischer Sprache angegeben wird.

<a href="{{ route('register') }}" class="...">Register</a>

Es ist sehr schwierig, eine automatische Übersetzung für alle Texte durchzuführen, wenn nicht angegeben wird, ob ein bestimmter Text übersetzt werden soll. Einfach alle Texte zu übersetzen kann zu Problemen führen.

Daher wird bei Laravel der Weg gewählt, explizit anzugeben, ob ein Text übersetzt werden soll.

Diese Angabe der nachfolgende Text soll übersetzt werden erfolgt mit Hilfe der Funktion __ (Der Name der Funktion lautet tatsächlich __, als zwei Unterstriche)

Anstatt

Register

schreiben wir nun

{{ __('Register') }}

Dadurch erkennt Laravel (speziell die Blade Template Engine), das hier eine Übersetzung durchgeführt werden soll und sucht eine passenden Übersetzungstext.

Hier kommt nun der bereits angesprochen Ordner resources/lang ins Spiel. Erstellen Sie in diesem Ordner eine Datei de,json und verwenden Sie als Inhalt den nachfolgenden Text:

Nach einen Neustart der Anwendung sehen wir gewünschte Ergebnis:

Den gewünschten Übersetzungstext findet Blades anhand des angegebenen Textes innerhalb der Funktion __:

welcome.blade.phpde.json

Die Übersetzung der Anwendung erfordert somit für alle Texte die gleichen Schritte

  • Ermitteln des Views mit dem zu übersetzenden Text, z. B. Sample Text
  • Einbinden des Textes in die Funktion , z. B. {{ ('Sample text') }}
  • Hinzufügen der Übersetzung in der Datei de.json, z. B. "Sample text“: Beispieltext

Erstellen einer neue Startseite

Die Startseite entspricht immer noch der Standardanwendung. Der entsprechende View ist welcome.blade.php.

Zur Startseite wird dieser View aber nicht durch den Namen, sondern durch eine Einstellung in der Datei routes/web.php

Mit Hilfe des von Laravel verwendeten Routing, wird festgelegt, welcher View angezeigt wird, wenn eine bestimmte URI aufgerufen wird.

In der vorhandenen Einstellung legt fest, das bei der Uri '/' der View 'welcome' angezeigt wird.

Einfache Startseite erstellen

Wir verwenden hier das in der Laravel Dokumentation beschrieben einfache Beispiel.

Erstellen Sie die Datei Datei resources/views/home.blade.php. Verwenden Sie als Inhalt den nachfolgenden Text

<html>
    <body>
        <h1>Hello, {{ $name }}</h1>
    </body>
</html>

Routing anpassen

Passen Sie dann die Datei routes/web.php an.

Route::get('/welcome', function () {
    return view('welcome');
})->name('welcome');

Route::get('/', function () {
    return view('home', ['name' => 'Laravel']);
});

Wir ändern die neue Startseite mit der Uri / und stellen die alte Startseite unter einer neuen Uri /welcome bereit.

Neue Startseite anzeigen

Öffnen Sie nun wieder die Seite http://localhost:8000 oder aktualisieren Sie ein bereits geöffnetes Browserfenster:

Die vorherige Startseite können wir über die Uri /welcome erreichen

Neue Seite zur Navigation hinzufügen

Erweitern Sie die Daten resources/views/navigation-menu.blade.php um einen Eintrag:

<!-- Navigation Links -->
<div class="hidden space-x-8 sm:-my-px sm:ml-10 sm:flex">
    <x-jet-nav-link href="{{ route('dashboard') }}" 
                    :active="request()->routeIs('dashboard')">
         {{ __('Dashboard') }}
    </x-jet-nav-link>
</div>

<div class="hidden space-x-8 sm:-my-px sm:ml-10 sm:flex">
    <x-jet-nav-link href="{{ route('welcome') }}" 
                    :active="request()->routeIs('welcome')">
         {{ __('Welcome') }}
    </x-jet-nav-link>
</div>

Komponenten

Komponente erstellen

php artisan make:component MyComponent

Blade-Komponenten registrieren

You can register your jetstream blade components in App\Providers\JetstreamServiceProvider.php located in app\Providers folder.

Fügen sie die nachfolgende Funktion hinzu:

protected function registerComponent(string $component) {
    \Illuminate\Support\Facades\Blade::component('jetstream::components.'.$component, 'jet-'.$component);
}

Der nachfolgende Programmcode registriert ihre Komponente:

public function register() {
    $this->registerComponent('subform');
}

Sie können diese nun wie folgt nutzen:

<x-jet-subform>

Laravel | Benutzermodel erweitern

Laravel bietet mit Eloquent ORM ein leistungsfähiges Datenbank-Framework.

Mit Hilfe von Modellen werden die Datenbankobjekte (z. B. Benutzer) definiert. Diese Objekte können dabei einfach durch zusätzliche Felder erweitert werden.

Im nachfolgenden Beispiel wollen wir das vorhandene Objekt User einer initialen Laravel-Installation durch ein Feld username erweitern.

Neues Feld den Benutzermodel hinzufügen

Erstellen eines Datenbank-Migrationsskriptes, das unser gewünschtes Feld zur Tabelle users hinzufügt.

php artisan make:migration add_column_username_to_users_table --table users

Hinzufügen des Felder Username in der neu erstellten Datei. Dies liegt unter database/migrations.

    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('username')->nullable();
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('username');
        });
    }

Hinzufügen des Feldes Username im Datenbankmodel User in der Datei app\Models\User.php

    protected $fillable = [
        'name',
        'email',
        'password',
        'username'
    ];

Datenbank aktualisieren.

Dieser Schritt entfernt alle Tabellen und erstellt sie neu. Dadurch gehen natürlich alle bereits vorhandenen Daten verloren!

❯ php artisan migrate:fresh --seed
Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (2,326.47ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (1,789.28ms)
Migrating: 2014_10_12_200000_add_two_factor_columns_to_users_table
Migrated:  2014_10_12_200000_add_two_factor_columns_to_users_table (1,010.74ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (2,399.99ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated:  2019_12_14_000001_create_personal_access_tokens_table (2,313.60ms)
Migrating: 2021_06_19_085151_create_sessions_table
Migrated:  2021_06_19_085151_create_sessions_table (5,279.76ms)
Migrating: 2021_06_19_102316_add_username_to_users_table
Migrated:  2021_06_19_102316_add_username_to_users_table (432.59ms)
Database seeding completed successfully.

Erweitern der Frontend Views

Hinzufügen des Feldes Username in der Datei resources\views\profile\edit.blade.php

<x-slot name="form">
   ...

   <!-- Email -->
      ...


   <!-- column username -->
   <div class="form-group row">
      <label for="username" class="col-md-4 col-form-label text-md-right">{{ __('Benutzername') }}</label>

      <div class="col-md-6">
         <input id="username" 
               type="text" 
               class="form-control @error('username') is-invalid @enderror" name="email" 
               value="{{ old('email') ?? auth()->user()->email }}" 
               required autocomplete="email" autofocus>

          @error('username')
          <span class="invalid-feedback" role="alert">
             <strong>{{ $message }}</strong>
          </span>
          @enderror
       </div>
    </div>
 </x-slot>

Anpassen des Controllers

Wir passen die PHP Komponente UpdateUserProfileInformation an, so das die neuen Werte gespeichert werden

app\Actions\Fortify\UpdateUserProfileInformation.php
    public function update($user, array $input)
    {
        ...

        if ($input['email'] !== $user->email &&
            $user instanceof MustVerifyEmail) {
            $this->updateVerifiedUser($user, $input);
        } else {
            $user->forceFill([
                'name' => $input['name'],
                'email' => $input['email'],
                'username' => $input['username'],
            ])->save();
        }
    }

Laravel | Installation der Entwicklungsumgebung

Installation

Voraussetzung für die Verwendung von Laravel ist eine Web-Server, der eine PHP Umgebung unterstützt bzw bereitstellt.

Eine einfache Umgebung wird durch XAMPP bereitgestellt. Eine Implementierung kann man bei Apache Friends herunterladen.

XAMPP ist hier ein Akronym für X (Beliebiges Betriebssystem) Apache + MariaDB + PHP + Perl

Im Laufe dieses Post werden mehrerer Pakete und Programme installiert. Alle werden unter einem Startorder installiert. Diese benennen wir im nachfolgenden mit $LARAVEL_TUTORIAL_ROOT

mkdir C:\LARAVEL_TUTORIAL

Setzen der Umgebungsvariablen unter Windows Command Line cmd

set LARAVEL_TUTORIAL_ROOT="C:\LARAVEL_TUTORIAL"

Setzen der Umgebungsvariablen unter Poweshell

$ENV:LARAVEL_TUTORIAL_ROOT="C:\LARAVEL_TUTOPRIAL"

Installation XAMPP

Download des Installer: https://www.apachefriends.org/index.html

Um mehrerer Versionen parallel zu installieren, stehen ZIP-Dateien zur Verfügung. Die aktuelle Version ist Installation mit dem Composer

Zielverzeichnis erstellen

mkdir $LARAVEL_TUTORIAL_ROOT\composer
cd $LARAVEL_TUTORIAL_ROOT\composer

Diese Verzeichnis als Umgebungsvariable festlehen

$ENV:COMPOSER_HOME = $ENV:LARAVEL_TUTORIAL_ROOT\composer
set COMPOSER_HOME



Composer herunterladen

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Pfad erweitern um

Fügen Sie die beiden nachfolgenden Pfad ihrer PATH Variablen hinzu:

composer.bat erstellen



Der Composer ist ein PHP Archiv mit der Dateierweiterung phar. Diese Dateien können nicht direkt aufgerufen werden, sondern stellen ein PHP Programm dar. Es muss als über PHP gestartet werden.

Hierzu erstellen wir einfach ein Skript, das diese Aufgabe für uns übernimmt. Erstellen Sie dazu die Datei composer.bat im Verzeichnis php

composer.ps1 erstellen

php $env:composer_home\composer.phar $args

composer Tipps und Tricks

Um weniger Meldungen anzuzeigen kann die nachfolgenden Konfigurationseinstellung verwendet werden:

composer global config bin-dir --absolute --quiet

Installation von NodeJS

https://nodejs.org/en/download/

Installation des Laravel Installer

Der Laravel Installer erleichterter das Einrichten und Erstellen neuer Laravel Anwendungen.

Installiert wird er mit Hilfe des Composer:

composer global require "laravel/installer"

Installation einer Beispielanwendung

laravel new blog

Nächste Schritte

Laravel | Installation einer Beispielanwendung

Laravel | Tutorial: Eine Blog erstellen