Upgrade to laravel 10.0.4

This commit is contained in:
Kevin MacMartin 2023-03-13 17:33:19 -04:00
parent 3c3b050922
commit 6b111a301a
40 changed files with 1164 additions and 1218 deletions

2
.gitattributes vendored
View file

@ -1,4 +1,4 @@
* text=auto * text=auto eol=lf
*.blade.php diff=html *.blade.php diff=html
*.css diff=css *.css diff=css

1
.gitignore vendored
View file

@ -6,6 +6,7 @@
auth.json auth.json
npm-debug.log npm-debug.log
yarn-error.log yarn-error.log
/.phpunit.cache
/node_modules /node_modules
/public/css /public/css
/public/fonts /public/fonts

View file

@ -1 +1 @@
39f4830e92a7467b2a7fe6bc23d0ec14bc3b46a6 22df611a2fe1e95e262643382d583ee0dbbca360

View file

@ -9,21 +9,16 @@ class Kernel extends ConsoleKernel
{ {
/** /**
* Define the application's command schedule. * Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/ */
protected function schedule(Schedule $schedule) protected function schedule(Schedule $schedule): void
{ {
// $schedule->command('inspire')->hourly(); // $schedule->command('inspire')->hourly();
} }
/** /**
* Register the commands for the application. * Register the commands for the application.
*
* @return void
*/ */
protected function commands() protected function commands(): void
{ {
$this->load(__DIR__.'/Commands'); $this->load(__DIR__.'/Commands');

View file

@ -38,10 +38,8 @@ class Handler extends ExceptionHandler
/** /**
* Register the exception handling callbacks for the application. * Register the exception handling callbacks for the application.
*
* @return void
*/ */
public function register() public function register(): void
{ {
$this->reportable(function (Throwable $e) { $this->reportable(function (Throwable $e) {
// //

View file

@ -3,11 +3,10 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController; use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController class Controller extends BaseController
{ {
use AuthorizesRequests, DispatchesJobs, ValidatesRequests; use AuthorizesRequests, ValidatesRequests;
} }

View file

@ -40,19 +40,19 @@ class Kernel extends HttpKernel
'api' => [ 'api' => [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api', \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class, \Illuminate\Routing\Middleware\SubstituteBindings::class,
], ],
]; ];
/** /**
* The application's route middleware. * The application's middleware aliases.
* *
* These middleware may be assigned to groups or used individually. * Aliases may be used to conveniently assign middleware to routes and groups.
* *
* @var array<string, class-string|string> * @var array<string, class-string|string>
*/ */
protected $routeMiddleware = [ protected $middlewareAliases = [
'auth' => \App\Http\Middleware\Authenticate::class, 'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,

View file

@ -3,19 +3,15 @@
namespace App\Http\Middleware; namespace App\Http\Middleware;
use Illuminate\Auth\Middleware\Authenticate as Middleware; use Illuminate\Auth\Middleware\Authenticate as Middleware;
use Illuminate\Http\Request;
class Authenticate extends Middleware class Authenticate extends Middleware
{ {
/** /**
* Get the path the user should be redirected to when they are not authenticated. * Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/ */
protected function redirectTo($request) protected function redirectTo(Request $request): ?string
{ {
if (! $request->expectsJson()) { return $request->expectsJson() ? null : route('login');
return route('login');
}
} }
} }

View file

@ -6,18 +6,16 @@ use App\Providers\RouteServiceProvider;
use Closure; use Closure;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
class RedirectIfAuthenticated class RedirectIfAuthenticated
{ {
/** /**
* Handle an incoming request. * Handle an incoming request.
* *
* @param \Illuminate\Http\Request $request * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @param string|null ...$guards
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/ */
public function handle(Request $request, Closure $next, ...$guards) public function handle(Request $request, Closure $next, string ...$guards): Response
{ {
$guards = empty($guards) ? [null] : $guards; $guards = empty($guards) ? [null] : $guards;

View file

@ -11,7 +11,7 @@ class TrustHosts extends Middleware
* *
* @return array<int, string|null> * @return array<int, string|null>
*/ */
public function hosts() public function hosts(): array
{ {
return [ return [
$this->allSubdomainsOfApplicationUrl(), $this->allSubdomainsOfApplicationUrl(),

View file

@ -10,20 +10,16 @@ class AppServiceProvider extends ServiceProvider
{ {
/** /**
* Register any application services. * Register any application services.
*
* @return void
*/ */
public function register() public function register(): void
{ {
// //
} }
/** /**
* Bootstrap any application services. * Bootstrap any application services.
*
* @return void
*/ */
public function boot() public function boot(): void
{ {
// Fix for migrations on older versions of mysql and mariadb // Fix for migrations on older versions of mysql and mariadb
Schema::defaultStringLength(191); Schema::defaultStringLength(191);

View file

@ -18,13 +18,9 @@ class AuthServiceProvider extends ServiceProvider
/** /**
* Register any authentication / authorization services. * Register any authentication / authorization services.
*
* @return void
*/ */
public function boot() public function boot(): void
{ {
$this->registerPolicies();
// //
} }
} }

View file

@ -9,10 +9,8 @@ class BroadcastServiceProvider extends ServiceProvider
{ {
/** /**
* Bootstrap any application services. * Bootstrap any application services.
*
* @return void
*/ */
public function boot() public function boot(): void
{ {
Broadcast::routes(); Broadcast::routes();

View file

@ -22,20 +22,16 @@ class EventServiceProvider extends ServiceProvider
/** /**
* Register any events for your application. * Register any events for your application.
*
* @return void
*/ */
public function boot() public function boot(): void
{ {
// //
} }
/** /**
* Determine if events and listeners should be automatically discovered. * Determine if events and listeners should be automatically discovered.
*
* @return bool
*/ */
public function shouldDiscoverEvents() public function shouldDiscoverEvents(): bool
{ {
return false; return false;
} }

View file

@ -21,10 +21,8 @@ class RouteServiceProvider extends ServiceProvider
/** /**
* Define your route model bindings, pattern filters, and other route configuration. * Define your route model bindings, pattern filters, and other route configuration.
*
* @return void
*/ */
public function boot() public function boot(): void
{ {
$this->configureRateLimiting(); $this->configureRateLimiting();
@ -40,10 +38,8 @@ class RouteServiceProvider extends ServiceProvider
/** /**
* Configure the rate limiters for the application. * Configure the rate limiters for the application.
*
* @return void
*/ */
protected function configureRateLimiting() protected function configureRateLimiting(): void
{ {
RateLimiter::for('api', function (Request $request) { RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());

View file

@ -5,27 +5,27 @@
"keywords": ["framework", "laravel"], "keywords": ["framework", "laravel"],
"license": "MIT", "license": "MIT",
"require": { "require": {
"php": "^8.0.2", "php": "^8.1",
"doctrine/dbal": "^3.3.6", "doctrine/dbal": "^3.6.1",
"erusev/parsedown": "^1.7.4", "erusev/parsedown": "^1.7.4",
"guzzlehttp/guzzle": "^7.2", "guzzlehttp/guzzle": "^7.2",
"intervention/image": "^2.7.2", "intervention/image": "^2.7.2",
"laravel/framework": "^9.19", "laravel/framework": "^10.0",
"laravel/helpers": "^1.5", "laravel/helpers": "^1.6",
"laravel/sanctum": "^3.0", "laravel/sanctum": "^3.2",
"laravel/tinker": "^2.7", "laravel/tinker": "^2.8",
"laravel/ui": "^3.5.4", "laravel/ui": "^4.2.1",
"phpoffice/phpspreadsheet": "^1.23.0", "phpoffice/phpspreadsheet": "^1.28.0",
"spatie/laravel-newsletter": "^4.11.0" "spatie/laravel-newsletter": "^5.1.1"
}, },
"require-dev": { "require-dev": {
"fakerphp/faker": "^1.9.1", "fakerphp/faker": "^1.9.1",
"laravel/pint": "^1.0", "laravel/pint": "^1.0",
"laravel/sail": "^1.0.1", "laravel/sail": "^1.18",
"mockery/mockery": "^1.4.4", "mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^6.1", "nunomaduro/collision": "^7.0",
"phpunit/phpunit": "^9.5.10", "phpunit/phpunit": "^10.0",
"spatie/laravel-ignition": "^1.0" "spatie/laravel-ignition": "^2.0"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -64,9 +64,10 @@
"preferred-install": "dist", "preferred-install": "dist",
"sort-packages": true, "sort-packages": true,
"allow-plugins": { "allow-plugins": {
"pestphp/pest-plugin": true "pestphp/pest-plugin": true,
"php-http/discovery": true
} }
}, },
"minimum-stability": "dev", "minimum-stability": "stable",
"prefer-stable": true "prefer-stable": true
} }

1892
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -86,16 +86,20 @@ return [
| than one user table or model in the application and you want to have | than one user table or model in the application and you want to have
| separate password reset settings based on the specific user types. | separate password reset settings based on the specific user types.
| |
| The expire time is the number of minutes that each reset token will be | The expiry time is the number of minutes that each reset token will be
| considered valid. This security feature keeps tokens short-lived so | considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed. | they have less time to be guessed. You may change this as needed.
| |
| The throttle setting is the number of seconds a user must wait before
| generating more password reset tokens. This prevents the user from
| quickly generating a very large amount of password reset tokens.
|
*/ */
'passwords' => [ 'passwords' => [
'users' => [ 'users' => [
'provider' => 'users', 'provider' => 'users',
'table' => 'password_resets', 'table' => 'password_reset_tokens',
'expire' => 60, 'expire' => 60,
'throttle' => 60, 'throttle' => 60,
], ],

View file

@ -102,6 +102,7 @@ return [
'syslog' => [ 'syslog' => [
'driver' => 'syslog', 'driver' => 'syslog',
'level' => env('LOG_LEVEL', 'debug'), 'level' => env('LOG_LEVEL', 'debug'),
'facility' => LOG_USER,
], ],
'errorlog' => [ 'errorlog' => [

View file

@ -28,7 +28,7 @@ return [
| sending an e-mail. You will specify which one you are using for your | sending an e-mail. You will specify which one you are using for your
| mailers below. You are free to add additional mailers as required. | mailers below. You are free to add additional mailers as required.
| |
| Supported: "smtp", "sendmail", "mailgun", "ses", | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
| "postmark", "log", "array", "failover" | "postmark", "log", "array", "failover"
| |
*/ */
@ -51,10 +51,16 @@ return [
'mailgun' => [ 'mailgun' => [
'transport' => 'mailgun', 'transport' => 'mailgun',
// 'client' => [
// 'timeout' => 5,
// ],
], ],
'postmark' => [ 'postmark' => [
'transport' => 'postmark', 'transport' => 'postmark',
// 'client' => [
// 'timeout' => 5,
// ],
], ],
'sendmail' => [ 'sendmail' => [

View file

@ -3,25 +3,31 @@
return [ return [
/* /*
* The api key of a MailChimp account. You can find yours here: * The driver to use to interact with MailChimp API.
* https://us10.admin.mailchimp.com/account/api-key-popup/ * You may use "log" or "null" to prevent calling the
* API directly from your environment.
*/ */
'apiKey' => env('MAILCHIMP_APIKEY'), 'driver' => env('NEWSLETTER_DRIVER', Spatie\Newsletter\Drivers\MailcoachDriver::class),
/**
* These arguments will be given to the driver.
*/
'driver_arguments' => [
'api_key' => env('MAILCHIMP_APIKEY'),
'endpoint' => env('NEWSLETTER_ENDPOINT'),
],
/* /*
* When not specifying a listname in the various methods, use the list with this name * The list name to use when no list name is specified in a method.
*/ */
'defaultListName' => 'subscribers', 'default_list_name' => 'subscribers',
/*
* Here you can define properties of the lists you want to
* send campaigns.
*/
'lists' => [ 'lists' => [
/* /*
* This key is used to identify this list. It can be used * This key is used to identify this list. It can be used
* in the various methods provided by this package. * as the listName parameter provided in the various methods.
* *
* You can set it to any string you want and you can add * You can set it to any string you want and you can add
* as many lists as you want. * as many lists as you want.
@ -29,16 +35,13 @@ return [
'subscribers' => [ 'subscribers' => [
/* /*
* A mail chimp list id. Check the mailchimp docs if you don't know * When using the Mailcoach driver, this should be Email list UUID
* how to get this value: * which is displayed in the Mailcoach UI
* http://kb.mailchimp.com/lists/managing-subscribers/find-your-list-id *
* When using the MailChimp driver, this should be a MailChimp list id.
* http://kb.mailchimp.com/lists/managing-subscribers/find-your-list-id.
*/ */
'id' => env('MAILCHIMP_LISTID'), 'id' => env('MAILCHIMP_LISTID'),
], ],
], ],
/*
* If you're having trouble with https connections, set this to false.
*/
'ssl' => true,
]; ];

View file

@ -15,7 +15,7 @@ class UserFactory extends Factory
* *
* @return array<string, mixed> * @return array<string, mixed>
*/ */
public function definition() public function definition(): array
{ {
return [ return [
'name' => fake()->name(), 'name' => fake()->name(),
@ -28,10 +28,8 @@ class UserFactory extends Factory
/** /**
* Indicate that the model's email address should be unverified. * Indicate that the model's email address should be unverified.
*
* @return static
*/ */
public function unverified() public function unverified(): static
{ {
return $this->state(fn (array $attributes) => [ return $this->state(fn (array $attributes) => [
'email_verified_at' => null, 'email_verified_at' => null,

View file

@ -8,10 +8,8 @@ return new class extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
*
* @return void
*/ */
public function up() public function up(): void
{ {
Schema::create('users', function(Blueprint $table) { Schema::create('users', function(Blueprint $table) {
$table->bigIncrements('id'); $table->bigIncrements('id');
@ -32,10 +30,8 @@ return new class extends Migration
/** /**
* Reverse the migrations. * Reverse the migrations.
*
* @return void
*/ */
public function down() public function down(): void
{ {
Schema::dropIfExists('users'); Schema::dropIfExists('users');
} }

View file

@ -8,13 +8,11 @@ return new class extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
*
* @return void
*/ */
public function up() public function up(): void
{ {
Schema::create('password_resets', function(Blueprint $table) { Schema::create('password_reset_tokens', function(Blueprint $table) {
$table->string('email')->index(); $table->string('email')->primary();
$table->string('token'); $table->string('token');
$table->timestamp('created_at')->nullable(); $table->timestamp('created_at')->nullable();
}); });
@ -22,11 +20,9 @@ return new class extends Migration
/** /**
* Reverse the migrations. * Reverse the migrations.
*
* @return void
*/ */
public function down() public function down(): void
{ {
Schema::dropIfExists('password_resets'); Schema::dropIfExists('password_reset_tokens');
} }
}; };

View file

@ -8,10 +8,8 @@ return new class extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
*
* @return void
*/ */
public function up() public function up(): void
{ {
Schema::create('contact', function(Blueprint $table) { Schema::create('contact', function(Blueprint $table) {
$table->bigIncrements('id'); $table->bigIncrements('id');
@ -24,10 +22,8 @@ return new class extends Migration
/** /**
* Reverse the migrations. * Reverse the migrations.
*
* @return void
*/ */
public function down() public function down(): void
{ {
Schema::drop('contact'); Schema::drop('contact');
} }

View file

@ -8,10 +8,8 @@ return new class extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
*
* @return void
*/ */
public function up() public function up(): void
{ {
Schema::create('subscriptions', function(Blueprint $table) { Schema::create('subscriptions', function(Blueprint $table) {
$table->bigIncrements('id'); $table->bigIncrements('id');
@ -23,10 +21,8 @@ return new class extends Migration
/** /**
* Reverse the migrations. * Reverse the migrations.
*
* @return void
*/ */
public function down() public function down(): void
{ {
Schema::drop('subscriptions'); Schema::drop('subscriptions');
} }

View file

@ -8,10 +8,8 @@ return new class extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
*
* @return void
*/ */
public function up() public function up(): void
{ {
Schema::create('blog', function(Blueprint $table) { Schema::create('blog', function(Blueprint $table) {
$table->bigIncrements('id'); $table->bigIncrements('id');
@ -25,10 +23,8 @@ return new class extends Migration
/** /**
* Reverse the migrations. * Reverse the migrations.
*
* @return void
*/ */
public function down() public function down(): void
{ {
Schema::drop('blog'); Schema::drop('blog');
} }

View file

@ -8,10 +8,8 @@ return new class extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
*
* @return void
*/ */
public function up() public function up(): void
{ {
Schema::create('failed_jobs', function (Blueprint $table) { Schema::create('failed_jobs', function (Blueprint $table) {
$table->id(); $table->id();
@ -26,10 +24,8 @@ return new class extends Migration
/** /**
* Reverse the migrations. * Reverse the migrations.
*
* @return void
*/ */
public function down() public function down(): void
{ {
Schema::dropIfExists('failed_jobs'); Schema::dropIfExists('failed_jobs');
} }

View file

@ -8,10 +8,8 @@ return new class extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
*
* @return void
*/ */
public function up() public function up(): void
{ {
Schema::create('personal_access_tokens', function (Blueprint $table) { Schema::create('personal_access_tokens', function (Blueprint $table) {
$table->id(); $table->id();
@ -20,17 +18,15 @@ return new class extends Migration
$table->string('token', 64)->unique(); $table->string('token', 64)->unique();
$table->text('abilities')->nullable(); $table->text('abilities')->nullable();
$table->timestamp('last_used_at')->nullable(); $table->timestamp('last_used_at')->nullable();
$table->timestamp('expires_at')->nullable(); $table->timestamp('expires_at')->nullable()->after('last_used_at');
$table->timestamps(); $table->timestamps();
}); });
} }
/** /**
* Reverse the migrations. * Reverse the migrations.
*
* @return void
*/ */
public function down() public function down(): void
{ {
Schema::dropIfExists('personal_access_tokens'); Schema::dropIfExists('personal_access_tokens');
} }

View file

@ -8,10 +8,8 @@ return new class extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
*
* @return void
*/ */
public function up() public function up(): void
{ {
Schema::create('blog_tags', function(Blueprint $table) { Schema::create('blog_tags', function(Blueprint $table) {
$table->bigIncrements('id'); $table->bigIncrements('id');
@ -25,10 +23,8 @@ return new class extends Migration
/** /**
* Reverse the migrations. * Reverse the migrations.
*
* @return void
*/ */
public function down() public function down(): void
{ {
Schema::drop('blog_tags'); Schema::drop('blog_tags');
} }

View file

@ -10,10 +10,8 @@ class DatabaseSeeder extends Seeder
{ {
/** /**
* Seed the application's database. * Seed the application's database.
*
* @return void
*/ */
public function run() public function run(): void
{ {
// \App\Models\User::factory(10)->create(); // \App\Models\User::factory(10)->create();

View file

@ -13,8 +13,8 @@ return [
| |
*/ */
'reset' => 'Your password has been reset!', 'reset' => 'Your password has been reset.',
'sent' => 'We have emailed your password reset link!', 'sent' => 'We have emailed your password reset link.',
'throttled' => 'Please wait before retrying.', 'throttled' => 'Please wait before retrying.',
'token' => 'This password reset token is invalid.', 'token' => 'This password reset token is invalid.',
'user' => "We can't find a user with that email address.", 'user' => "We can't find a user with that email address.",

View file

@ -13,105 +13,110 @@ return [
| |
*/ */
'accepted' => 'The :attribute must be accepted.', 'accepted' => 'The :attribute field must be accepted.',
'accepted_if' => 'The :attribute must be accepted when :other is :value.', 'accepted_if' => 'The :attribute field must be accepted when :other is :value.',
'active_url' => 'The :attribute is not a valid URL.', 'active_url' => 'The :attribute field must be a valid URL.',
'after' => 'The :attribute must be a date after :date.', 'after' => 'The :attribute field must be a date after :date.',
'after_or_equal' => 'The :attribute must be a date after or equal to :date.', 'after_or_equal' => 'The :attribute field must be a date after or equal to :date.',
'alpha' => 'The :attribute must only contain letters.', 'alpha' => 'The :attribute field must only contain letters.',
'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', 'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.',
'alpha_num' => 'The :attribute must only contain letters and numbers.', 'alpha_num' => 'The :attribute field must only contain letters and numbers.',
'array' => 'The :attribute must be an array.', 'array' => 'The :attribute field must be an array.',
'ascii' => 'The :attribute must only contain single-byte alphanumeric characters and symbols.', 'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',
'before' => 'The :attribute must be a date before :date.', 'before' => 'The :attribute field must be a date before :date.',
'before_or_equal' => 'The :attribute must be a date before or equal to :date.', 'before_or_equal' => 'The :attribute field must be a date before or equal to :date.',
'between' => [ 'between' => [
'array' => 'The :attribute must have between :min and :max items.', 'array' => 'The :attribute field must have between :min and :max items.',
'file' => 'The :attribute must be between :min and :max kilobytes.', 'file' => 'The :attribute field must be between :min and :max kilobytes.',
'numeric' => 'The :attribute must be between :min and :max.', 'numeric' => 'The :attribute field must be between :min and :max.',
'string' => 'The :attribute must be between :min and :max characters.', 'string' => 'The :attribute field must be between :min and :max characters.',
], ],
'boolean' => 'The :attribute field must be true or false.', 'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.', 'confirmed' => 'The :attribute field confirmation does not match.',
'current_password' => 'The password is incorrect.', 'current_password' => 'The password is incorrect.',
'date' => 'The :attribute is not a valid date.', 'date' => 'The :attribute field must be a valid date.',
'date_equals' => 'The :attribute must be a date equal to :date.', 'date_equals' => 'The :attribute field must be a date equal to :date.',
'date_format' => 'The :attribute does not match the format :format.', 'date_format' => 'The :attribute field must match the format :format.',
'decimal' => 'The :attribute must have :decimal decimal places.', 'decimal' => 'The :attribute field must have :decimal decimal places.',
'declined' => 'The :attribute must be declined.', 'declined' => 'The :attribute field must be declined.',
'declined_if' => 'The :attribute must be declined when :other is :value.', 'declined_if' => 'The :attribute field must be declined when :other is :value.',
'different' => 'The :attribute and :other must be different.', 'different' => 'The :attribute field and :other must be different.',
'digits' => 'The :attribute must be :digits digits.', 'digits' => 'The :attribute field must be :digits digits.',
'digits_between' => 'The :attribute must be between :min and :max digits.', 'digits_between' => 'The :attribute field must be between :min and :max digits.',
'dimensions' => 'The :attribute has invalid image dimensions.', 'dimensions' => 'The :attribute field has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.', 'distinct' => 'The :attribute field has a duplicate value.',
'doesnt_end_with' => 'The :attribute may not end with one of the following: :values.', 'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.',
'doesnt_start_with' => 'The :attribute may not start with one of the following: :values.', 'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.',
'email' => 'The :attribute must be a valid email address.', 'email' => 'The :attribute field must be a valid email address.',
'ends_with' => 'The :attribute must end with one of the following: :values.', 'ends_with' => 'The :attribute field must end with one of the following: :values.',
'enum' => 'The selected :attribute is invalid.', 'enum' => 'The selected :attribute is invalid.',
'exists' => 'The selected :attribute is invalid.', 'exists' => 'The selected :attribute is invalid.',
'file' => 'The :attribute must be a file.', 'file' => 'The :attribute field must be a file.',
'filled' => 'The :attribute field must have a value.', 'filled' => 'The :attribute field must have a value.',
'gt' => [ 'gt' => [
'array' => 'The :attribute must have more than :value items.', 'array' => 'The :attribute field must have more than :value items.',
'file' => 'The :attribute must be greater than :value kilobytes.', 'file' => 'The :attribute field must be greater than :value kilobytes.',
'numeric' => 'The :attribute must be greater than :value.', 'numeric' => 'The :attribute field must be greater than :value.',
'string' => 'The :attribute must be greater than :value characters.', 'string' => 'The :attribute field must be greater than :value characters.',
], ],
'gte' => [ 'gte' => [
'array' => 'The :attribute must have :value items or more.', 'array' => 'The :attribute field must have :value items or more.',
'file' => 'The :attribute must be greater than or equal to :value kilobytes.', 'file' => 'The :attribute field must be greater than or equal to :value kilobytes.',
'numeric' => 'The :attribute must be greater than or equal to :value.', 'numeric' => 'The :attribute field must be greater than or equal to :value.',
'string' => 'The :attribute must be greater than or equal to :value characters.', 'string' => 'The :attribute field must be greater than or equal to :value characters.',
], ],
'image' => 'The :attribute must be an image.', 'image' => 'The :attribute field must be an image.',
'in' => 'The selected :attribute is invalid.', 'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field does not exist in :other.', 'in_array' => 'The :attribute field must exist in :other.',
'integer' => 'The :attribute must be an integer.', 'integer' => 'The :attribute field must be an integer.',
'ip' => 'The :attribute must be a valid IP address.', 'ip' => 'The :attribute field must be a valid IP address.',
'ipv4' => 'The :attribute must be a valid IPv4 address.', 'ipv4' => 'The :attribute field must be a valid IPv4 address.',
'ipv6' => 'The :attribute must be a valid IPv6 address.', 'ipv6' => 'The :attribute field must be a valid IPv6 address.',
'json' => 'The :attribute must be a valid JSON string.', 'json' => 'The :attribute field must be a valid JSON string.',
'lowercase' => 'The :attribute must be lowercase.', 'lowercase' => 'The :attribute field must be lowercase.',
'lt' => [ 'lt' => [
'array' => 'The :attribute must have less than :value items.', 'array' => 'The :attribute field must have less than :value items.',
'file' => 'The :attribute must be less than :value kilobytes.', 'file' => 'The :attribute field must be less than :value kilobytes.',
'numeric' => 'The :attribute must be less than :value.', 'numeric' => 'The :attribute field must be less than :value.',
'string' => 'The :attribute must be less than :value characters.', 'string' => 'The :attribute field must be less than :value characters.',
], ],
'lte' => [ 'lte' => [
'array' => 'The :attribute must not have more than :value items.', 'array' => 'The :attribute field must not have more than :value items.',
'file' => 'The :attribute must be less than or equal to :value kilobytes.', 'file' => 'The :attribute field must be less than or equal to :value kilobytes.',
'numeric' => 'The :attribute must be less than or equal to :value.', 'numeric' => 'The :attribute field must be less than or equal to :value.',
'string' => 'The :attribute must be less than or equal to :value characters.', 'string' => 'The :attribute field must be less than or equal to :value characters.',
], ],
'mac_address' => 'The :attribute must be a valid MAC address.', 'mac_address' => 'The :attribute field must be a valid MAC address.',
'max' => [ 'max' => [
'array' => 'The :attribute must not have more than :max items.', 'array' => 'The :attribute field must not have more than :max items.',
'file' => 'The :attribute must not be greater than :max kilobytes.', 'file' => 'The :attribute field must not be greater than :max kilobytes.',
'numeric' => 'The :attribute must not be greater than :max.', 'numeric' => 'The :attribute field must not be greater than :max.',
'string' => 'The :attribute must not be greater than :max characters.', 'string' => 'The :attribute field must not be greater than :max characters.',
], ],
'max_digits' => 'The :attribute must not have more than :max digits.', 'max_digits' => 'The :attribute field must not have more than :max digits.',
'mimes' => 'The :attribute must be a file of type: :values.', 'mimes' => 'The :attribute field must be a file of type: :values.',
'mimetypes' => 'The :attribute must be a file of type: :values.', 'mimetypes' => 'The :attribute field must be a file of type: :values.',
'min' => [ 'min' => [
'array' => 'The :attribute must have at least :min items.', 'array' => 'The :attribute field must have at least :min items.',
'file' => 'The :attribute must be at least :min kilobytes.', 'file' => 'The :attribute field must be at least :min kilobytes.',
'numeric' => 'The :attribute must be at least :min.', 'numeric' => 'The :attribute field must be at least :min.',
'string' => 'The :attribute must be at least :min characters.', 'string' => 'The :attribute field must be at least :min characters.',
], ],
'min_digits' => 'The :attribute must have at least :min digits.', 'min_digits' => 'The :attribute field must have at least :min digits.',
'multiple_of' => 'The :attribute must be a multiple of :value.', 'missing' => 'The :attribute field must be missing.',
'missing_if' => 'The :attribute field must be missing when :other is :value.',
'missing_unless' => 'The :attribute field must be missing unless :other is :value.',
'missing_with' => 'The :attribute field must be missing when :values is present.',
'missing_with_all' => 'The :attribute field must be missing when :values are present.',
'multiple_of' => 'The :attribute field must be a multiple of :value.',
'not_in' => 'The selected :attribute is invalid.', 'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'The :attribute format is invalid.', 'not_regex' => 'The :attribute field format is invalid.',
'numeric' => 'The :attribute must be a number.', 'numeric' => 'The :attribute field must be a number.',
'password' => [ 'password' => [
'letters' => 'The :attribute must contain at least one letter.', 'letters' => 'The :attribute field must contain at least one letter.',
'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.', 'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.',
'numbers' => 'The :attribute must contain at least one number.', 'numbers' => 'The :attribute field must contain at least one number.',
'symbols' => 'The :attribute must contain at least one symbol.', 'symbols' => 'The :attribute field must contain at least one symbol.',
'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
], ],
'present' => 'The :attribute field must be present.', 'present' => 'The :attribute field must be present.',
@ -119,7 +124,7 @@ return [
'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
'prohibits' => 'The :attribute field prohibits :other from being present.', 'prohibits' => 'The :attribute field prohibits :other from being present.',
'regex' => 'The :attribute format is invalid.', 'regex' => 'The :attribute field format is invalid.',
'required' => 'The :attribute field is required.', 'required' => 'The :attribute field is required.',
'required_array_keys' => 'The :attribute field must contain entries for: :values.', 'required_array_keys' => 'The :attribute field must contain entries for: :values.',
'required_if' => 'The :attribute field is required when :other is :value.', 'required_if' => 'The :attribute field is required when :other is :value.',
@ -129,22 +134,22 @@ return [
'required_with_all' => 'The :attribute field is required when :values are present.', 'required_with_all' => 'The :attribute field is required when :values are present.',
'required_without' => 'The :attribute field is required when :values is not present.', 'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.', 'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => 'The :attribute and :other must match.', 'same' => 'The :attribute field must match :other.',
'size' => [ 'size' => [
'array' => 'The :attribute must contain :size items.', 'array' => 'The :attribute field must contain :size items.',
'file' => 'The :attribute must be :size kilobytes.', 'file' => 'The :attribute field must be :size kilobytes.',
'numeric' => 'The :attribute must be :size.', 'numeric' => 'The :attribute field must be :size.',
'string' => 'The :attribute must be :size characters.', 'string' => 'The :attribute field must be :size characters.',
], ],
'starts_with' => 'The :attribute must start with one of the following: :values.', 'starts_with' => 'The :attribute field must start with one of the following: :values.',
'string' => 'The :attribute must be a string.', 'string' => 'The :attribute field must be a string.',
'timezone' => 'The :attribute must be a valid timezone.', 'timezone' => 'The :attribute field must be a valid timezone.',
'unique' => 'The :attribute has already been taken.', 'unique' => 'The :attribute has already been taken.',
'uploaded' => 'The :attribute failed to upload.', 'uploaded' => 'The :attribute failed to upload.',
'uppercase' => 'The :attribute must be uppercase.', 'uppercase' => 'The :attribute field must be uppercase.',
'url' => 'The :attribute must be a valid URL.', 'url' => 'The :attribute field must be a valid URL.',
'ulid' => 'The :attribute must be a valid ULID.', 'ulid' => 'The :attribute field must be a valid ULID.',
'uuid' => 'The :attribute must be a valid UUID.', 'uuid' => 'The :attribute field must be a valid UUID.',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

View file

@ -12,7 +12,7 @@
<directory suffix="Test.php">./tests/Feature</directory> <directory suffix="Test.php">./tests/Feature</directory>
</testsuite> </testsuite>
</testsuites> </testsuites>
<coverage processUncoveredFiles="true"> <coverage>
<include> <include>
<directory suffix=".php">./app</directory> <directory suffix=".php">./app</directory>
</include> </include>

View file

@ -21,7 +21,7 @@ A Hypothetical website template for bootstrapping new projects.
* Gsap * Gsap
* Gulp * Gulp
* Jquery * Jquery
* Laravel 9 * Laravel 10.0.4
* Sass * Sass
* Vue 3 (Optional) * Vue 3 (Optional)

View file

@ -9,8 +9,8 @@ use Illuminate\Support\Facades\Route;
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here is where you can register API routes for your application. These | Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which | routes are loaded by the RouteServiceProvider and all of them will
| is assigned the "api" middleware group. Enjoy building your API! | be assigned to the "api" middleware group. Make something great!
| |
*/ */

View file

@ -9,8 +9,8 @@ use App\Dashboard;
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here is where you can register web routes for your application. These | Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which | routes are loaded by the RouteServiceProvider and all of them will
| contains the "web" middleware group. Now create something great! | be assigned to the "web" middleware group. Make something great!
| |
*/ */

View file

@ -3,15 +3,14 @@
namespace Tests; namespace Tests;
use Illuminate\Contracts\Console\Kernel; use Illuminate\Contracts\Console\Kernel;
use Illuminate\Foundation\Application;
trait CreatesApplication trait CreatesApplication
{ {
/** /**
* Creates the application. * Creates the application.
*
* @return \Illuminate\Foundation\Application
*/ */
public function createApplication() public function createApplication(): Application
{ {
$app = require __DIR__.'/../bootstrap/app.php'; $app = require __DIR__.'/../bootstrap/app.php';

View file

@ -9,10 +9,8 @@ class ExampleTest extends TestCase
{ {
/** /**
* A basic test example. * A basic test example.
*
* @return void
*/ */
public function test_the_application_returns_a_successful_response() public function test_the_application_returns_a_successful_response(): void
{ {
$response = $this->get('/'); $response = $this->get('/');

View file

@ -8,10 +8,8 @@ class ExampleTest extends TestCase
{ {
/** /**
* A basic test example. * A basic test example.
*
* @return void
*/ */
public function test_that_true_is_true() public function test_that_true_is_true(): void
{ {
$this->assertTrue(true); $this->assertTrue(true);
} }