پیش شناخت
- معرفی
- اعتبار سنجی زنده
- سفارشی کردن قوانین اعتبارسنجی
- مدیریت آپلود فایل
- مدیریت عوارض جانبی
- آزمایش کردن
معرفی
Laravel Precognition به شما این امکان را می دهد که نتیجه یک درخواست HTTP آینده را پیش بینی کنید. یکی از موارد استفاده اولیه از Precognition، توانایی ارائه اعتبار سنجی "زنده" برای برنامه جاوا اسکریپت ظاهری شما بدون نیاز به تکرار قوانین اعتبار سنجی باطن برنامه شما است. Precognition به ویژه با کیت های شروع کننده مبتنی بر اینرسی لاراول جفت می شود .
وقتی لاراول یک «درخواست پیششناختی» دریافت میکند، تمام میانافزار مسیر را اجرا میکند و وابستگیهای کنترلکننده مسیر، از جمله اعتبارسنجی درخواستهای فرم را حل میکند - اما در واقع روش کنترلکننده مسیر را اجرا نمیکند.
اعتبار سنجی زنده
با استفاده از Vue
با استفاده از Laravel Precognition، میتوانید تجربههای اعتبارسنجی زنده را بدون نیاز به تکرار قوانین اعتبارسنجی در برنامه Vue frontend خود به کاربران خود ارائه دهید. برای نشان دادن نحوه عملکرد آن، بیایید فرمی برای ایجاد کاربران جدید در برنامه خود بسازیم.
ابتدا برای فعال کردن Precognition برای یک مسیر،
HandlePrecognitiveRequests
میان افزار باید به تعریف مسیر اضافه شود. شما همچنین باید یک
فرم درخواست
ایجاد کنید تا قوانین اعتبارسنجی مسیر را در خود جای دهد:
use App\Http\Requests\StoreUserRequest;use Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests; Route::post('/users', function (StoreUserRequest $request) { // ...})->middleware([HandlePrecognitiveRequests::class]);
در مرحله بعد، باید از طریق NPM، کمککنندههای Frontend Laravel Precognition را برای Vue نصب کنید:
npm install laravel-precognition-vue
با نصب بسته Laravel Precognition، اکنون می توانید با استفاده از تابع Precognition، یک شی فرم ایجاد کنید
useForm
، روش HTTP (
post
)، URL هدف (
/users
) و داده های فرم اولیه را ارائه دهید.
سپس، برای فعال کردن اعتبارسنجی زنده، متد فرم را
validate
در رویداد هر ورودی فراخوانی کنید
change
و نام ورودی را ارائه دهید:
<script setup>import { useForm } from 'laravel-precognition-vue'; const form = useForm('post', '/users', { name: '', email: '',}); const submit = () => form.submit();</script> <template> <form @submit.prevent="submit"> <label for="name">Name</label> <input id="name" v-model="form.name" @change="form.validate('name')" /> <div v-if="form.invalid('name')"> {{ form.errors.name }} </div> <label for="email">Email</label> <input id="email" type="email" v-model="form.email" @change="form.validate('email')" /> <div v-if="form.invalid('email')"> {{ form.errors.email }} </div> <button :disabled="form.processing"> Create User </button> </form></template>
اکنون، همانطور که فرم توسط کاربر پر می شود، Precognition خروجی اعتبارسنجی زنده را ارائه می دهد که توسط قوانین اعتبارسنجی در درخواست فرم مسیر ارائه می شود. هنگامی که ورودیهای فرم تغییر میکنند، یک درخواست اعتبارسنجی «پیششناختی» به برنامه لاراول شما ارسال میشود. میتوانید با فراخوانی تابع فرم، مهلت زمانی برگشت را پیکربندی کنید
setValidationTimeout
:
form.setValidationTimeout(3000);
هنگامی که یک درخواست اعتبار سنجی در حین پرواز است، ویژگی فرم به صورت زیر
validating
خواهد بود
true
:
<div v-if="form.validating"> Validating...</div>
هر گونه خطای اعتبارسنجی که در طول درخواست اعتبارسنجی یا ارسال فرم برگردانده شود، به طور خودکار
errors
شی فرم را پر می کند:
<div v-if="form.invalid('email')"> {{ form.errors.email }}</div>
با استفاده از ویژگی فرم می توانید تعیین کنید که آیا فرم دارای خطا است
hasErrors
:
<div v-if="form.hasErrors"> <!-- ... --></div>
همچنین میتوانید با ارسال نام ورودی به فرمها
valid
و
invalid
توابع، تعیین کنید که آیا یک ورودی اعتبارسنجی شده است یا ناموفق:
<span v-if="form.valid('email')"> ✅</span> <span v-else-if="form.invalid('email')"> ❌</span>
یک ورودی فرم فقط زمانی معتبر یا نامعتبر ظاهر می شود که تغییر کند و پاسخ تأیید اعتبار دریافت شود.
اگر زیرمجموعهای از ورودیهای فرم را با Precognition تأیید میکنید، پاک کردن دستی خطاها میتواند مفید باشد.
forgetError
برای رسیدن به این هدف
می توانید از تابع فرم استفاده کنید :
<input id="avatar" type="file" @change="(e) => { form.avatar = e.target.files[0] form.forgetError('avatar') }">
البته، ممکن است در واکنش به پاسخ ارسال فرم کدی را نیز اجرا کنید. تابع
فرم
submit
یک وعده درخواست Axios را برمی گرداند. این یک راه راحت برای دسترسی به بار پاسخ، بازنشانی ورودیهای فرم در ارسال موفقیتآمیز، یا رسیدگی به درخواست ناموفق را فراهم میکند:
const submit = () => form.submit() .then(response => { form.reset(); alert('User created.'); }) .catch(error => { alert('An error occurred.'); });
شما می توانید با بررسی ویژگی فرم تعیین کنید که آیا درخواست ارسال فرم در حال پرواز است یا خیر
processing
:
<button :disabled="form.processing"> Submit</button>
با استفاده از Vue و Inertia
اگر میخواهید هنگام توسعه برنامه لاراول خود با Vue و Inertia شروعی داشته باشید، از یکی از کیتهای شروع ما استفاده کنید . کیت های شروع لاراول دارای داربست احراز هویت Backend و Frontend برای برنامه جدید Laravel شما هستند.
قبل از استفاده از Precognition با Vue و Inertia، مطمئن شوید که مستندات کلی ما در مورد استفاده از Precognition با Vue را مرور کنید . هنگام استفاده از Vue با Inertia، باید کتابخانه Precognition سازگار با اینرسی را از طریق NPM نصب کنید:
npm install laravel-precognition-vue-inertia
پس از نصب، تابع Precognition یک
کمک کننده فرم
اینرسی را به همراه ویژگی های اعتبارسنجی که در بالا توضیح داده شد،
useForm
برمی گرداند .
روش کمک کننده فرم
submit
ساده شده است و نیاز به تعیین روش HTTP یا URL را از بین برده است. در عوض، میتوانید
گزینههای بازدید
Inertia را
به عنوان اولین و تنها آرگومان ارسال کنید. بعلاوه،
submit
روش همانگونه که در مثال Vue در بالا مشاهده می شود، یک Promise بر نمی گرداند. در عوض، میتوانید هر یک از
تماسهای رویداد
پشتیبانیشده Inertia را
در گزینههای بازدید دادهشده به
submit
روش ارائه دهید:
<script setup>import { useForm } from 'laravel-precognition-vue-inertia'; const form = useForm('post', '/users', { name: '', email: '',}); const submit = () => form.submit({ preserveScroll: true, onSuccess: () => form.reset(),});</script>
با استفاده از React
با استفاده از Laravel Precognition، میتوانید تجربههای اعتبارسنجی زنده را بدون نیاز به تکرار قوانین اعتبارسنجی در برنامه React frontend خود به کاربران خود ارائه دهید. برای نشان دادن نحوه عملکرد آن، بیایید فرمی برای ایجاد کاربران جدید در برنامه خود بسازیم.
ابتدا برای فعال کردن Precognition برای یک مسیر،
HandlePrecognitiveRequests
میان افزار باید به تعریف مسیر اضافه شود. شما همچنین باید یک
فرم درخواست
ایجاد کنید تا قوانین اعتبارسنجی مسیر را در خود جای دهد:
use App\Http\Requests\StoreUserRequest;use Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests; Route::post('/users', function (StoreUserRequest $request) { // ...})->middleware([HandlePrecognitiveRequests::class]);
در مرحله بعد، باید کمککنندههای پیشفرض لاراول را برای React از طریق NPM نصب کنید:
npm install laravel-precognition-react
با نصب بسته Laravel Precognition، اکنون می توانید با استفاده از تابع Precognition، یک شی فرم ایجاد کنید
useForm
، روش HTTP (
post
)، URL هدف (
/users
) و داده های فرم اولیه را ارائه دهید.
برای فعال کردن اعتبارسنجی زنده، باید به هر ورودی
change
و
blur
رویداد گوش دهید. در
change
کنترل کننده رویداد، باید داده های فرم را با
setData
تابع تنظیم کنید، نام ورودی و مقدار جدید را ارسال کنید. سپس، در
blur
کنترل کننده رویداد، متد فرم را فراخوانی می کند
validate
و نام ورودی را ارائه می دهد:
import { useForm } from 'laravel-precognition-react'; export default function Form() { const form = useForm('post', '/users', { name: '', email: '', }); const submit = (e) => { e.preventDefault(); form.submit(); }; return ( <form onSubmit={submit}> <label for="name">Name</label> <input id="name" value={form.data.name} onChange={(e) => form.setData('name', e.target.value)} onBlur={() => form.validate('name')} /> {form.invalid('name') && <div>{form.errors.name}</div>} <label for="email">Email</label> <input id="email" value={form.data.email} onChange={(e) => form.setData('email', e.target.value)} onBlur={() => form.validate('email')} /> {form.invalid('email') && <div>{form.errors.email}</div>} <button disabled={form.processing}> Create User </button> </form> );};
اکنون، همانطور که فرم توسط کاربر پر می شود، Precognition خروجی اعتبارسنجی زنده را ارائه می دهد که توسط قوانین اعتبارسنجی در درخواست فرم مسیر ارائه می شود. هنگامی که ورودیهای فرم تغییر میکنند، یک درخواست اعتبارسنجی «پیششناختی» به برنامه لاراول شما ارسال میشود. میتوانید با فراخوانی تابع فرم، مهلت زمانی برگشت را پیکربندی کنید
setValidationTimeout
:
form.setValidationTimeout(3000);
هنگامی که یک درخواست اعتبار سنجی در حین پرواز است، ویژگی فرم به صورت زیر
validating
خواهد بود
true
:
{form.validating && <div>Validating...</div>}
هر گونه خطای اعتبارسنجی که در طول درخواست اعتبارسنجی یا ارسال فرم برگردانده شود، به طور خودکار
errors
شی فرم را پر می کند:
{form.invalid('email') && <div>{form.errors.email}</div>}
با استفاده از ویژگی فرم می توانید تعیین کنید که آیا فرم دارای خطا است
hasErrors
:
{form.hasErrors && <div><!-- ... --></div>}
همچنین میتوانید با ارسال نام ورودی به فرمها
valid
و
invalid
توابع، تعیین کنید که آیا یک ورودی اعتبارسنجی شده است یا ناموفق:
{form.valid('email') && <span>✅</span>} {form.invalid('email') && <span>❌</span>}
یک ورودی فرم فقط زمانی معتبر یا نامعتبر ظاهر می شود که تغییر کند و پاسخ تأیید اعتبار دریافت شود.
اگر زیرمجموعهای از ورودیهای فرم را با Precognition تأیید میکنید، پاک کردن دستی خطاها میتواند مفید باشد.
forgetError
برای رسیدن به این هدف
می توانید از تابع فرم استفاده کنید :
<input id="avatar" type="file" onChange={(e) => form.setData('avatar', e.target.value); form.forgetError('avatar'); }>
البته، ممکن است در واکنش به پاسخ ارسال فرم کدی را نیز اجرا کنید. تابع
فرم
submit
یک وعده درخواست Axios را برمی گرداند. این یک راه راحت برای دسترسی به بار پاسخ، بازنشانی ورودیهای فرم در ارسال موفق فرم، یا رسیدگی به درخواست ناموفق را فراهم میکند:
const submit = (e) => { e.preventDefault(); form.submit() .then(response => { form.reset(); alert('User created.'); }) .catch(error => { alert('An error occurred.'); });};
شما می توانید با بررسی ویژگی فرم تعیین کنید که آیا درخواست ارسال فرم در حال پرواز است یا خیر
processing
:
<button disabled={form.processing}> Submit</button>
با استفاده از React و Inertia
اگر میخواهید در هنگام توسعه برنامه لاراول خود با React و Inertia شروع کنید، از یکی از کیتهای شروع ما استفاده کنید . کیت های شروع لاراول دارای داربست احراز هویت Backend و Frontend برای برنامه جدید Laravel شما هستند.
قبل از استفاده از Precognition با React و Inertia، مطمئن شوید که اسناد کلی ما در مورد استفاده از Precognition با React را مرور کنید . هنگام استفاده از React with Inertia، باید کتابخانه Precognition سازگار با اینرسی را از طریق NPM نصب کنید:
npm install laravel-precognition-react-inertia
پس از نصب، تابع Precognition یک
کمک کننده فرم
اینرسی را به همراه ویژگی های اعتبارسنجی که در بالا توضیح داده شد،
useForm
برمی گرداند .
روش کمک کننده فرم
submit
ساده شده است و نیاز به تعیین روش HTTP یا URL را از بین برده است. در عوض، میتوانید
گزینههای بازدید
Inertia را
به عنوان اولین و تنها آرگومان ارسال کنید. علاوه بر این،
submit
متد یک Promise را همانطور که در مثال React در بالا مشاهده می شود، بر نمی گرداند. در عوض، میتوانید هر یک از
تماسهای رویداد
پشتیبانیشده Inertia را
در گزینههای بازدید دادهشده به
submit
روش ارائه دهید:
import { useForm } from 'laravel-precognition-react-inertia'; const form = useForm('post', '/users', { name: '', email: '',}); const submit = (e) => { e.preventDefault(); form.submit({ preserveScroll: true, onSuccess: () => form.reset(), });};
با استفاده از Alpine و Blade
با استفاده از Laravel Precognition، میتوانید تجربههای اعتبارسنجی زنده را بدون نیاز به تکرار قوانین اعتبارسنجی در برنامه Alpine frontend خود به کاربران خود ارائه دهید. برای نشان دادن نحوه عملکرد آن، بیایید فرمی برای ایجاد کاربران جدید در برنامه خود بسازیم.
ابتدا برای فعال کردن Precognition برای یک مسیر،
HandlePrecognitiveRequests
میان افزار باید به تعریف مسیر اضافه شود. شما همچنین باید یک
فرم درخواست
ایجاد کنید تا قوانین اعتبارسنجی مسیر را در خود جای دهد:
use App\Http\Requests\CreateUserRequest;use Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests; Route::post('/users', function (CreateUserRequest $request) { // ...})->middleware([HandlePrecognitiveRequests::class]);
در مرحله بعد، باید از طریق NPM کمککنندههای پیشفرض لاراول را برای Alpine نصب کنید:
npm install laravel-precognition-alpine
سپس، افزونه Precognition را با Alpine در
resources/js/app.js
فایل خود ثبت کنید:
import Alpine from 'alpinejs';import Precognition from 'laravel-precognition-alpine'; window.Alpine = Alpine; Alpine.plugin(Precognition);Alpine.start();
با نصب و ثبت بسته Laravel Precognition، اکنون می توانید با استفاده از
$form
"جادوی Precognition" یک شی فرم ایجاد کنید، روش HTTP (
post
)، URL هدف (
/users
) و داده های فرم اولیه را ارائه دهید.
change
برای فعال کردن اعتبارسنجی زنده، باید دادههای فرم را به ورودی مربوطه متصل کنید و سپس به رویداد
هر ورودی گوش دهید .
در
change
کنترل کننده رویداد، باید
validate
متد فرم را فراخوانی کنید و نام ورودی را ارائه دهید:
<form x-data="{ form: $form('post', '/register', { name: '', email: '', }),}"> @csrf <label for="name">Name</label> <input id="name" name="name" x-model="form.name" @change="form.validate('name')" /> <template x-if="form.invalid('name')"> <div x-text="form.errors.name"></div> </template> <label for="email">Email</label> <input id="email" name="email" x-model="form.email" @change="form.validate('email')" /> <template x-if="form.invalid('email')"> <div x-text="form.errors.email"></div> </template> <button :disabled="form.processing"> Create User </button></form>
اکنون، همانطور که فرم توسط کاربر پر می شود، Precognition خروجی اعتبارسنجی زنده را ارائه می دهد که توسط قوانین اعتبارسنجی در درخواست فرم مسیر ارائه می شود. هنگامی که ورودیهای فرم تغییر میکنند، یک درخواست اعتبارسنجی «پیششناختی» به برنامه لاراول شما ارسال میشود. میتوانید با فراخوانی تابع فرم، مهلت زمانی برگشت را پیکربندی کنید
setValidationTimeout
:
form.setValidationTimeout(3000);
هنگامی که یک درخواست اعتبار سنجی در حین پرواز است، ویژگی فرم به صورت زیر
validating
خواهد بود
true
:
<template x-if="form.validating"> <div>Validating...</div></template>
هر گونه خطای اعتبارسنجی که در طول درخواست اعتبارسنجی یا ارسال فرم برگردانده شود، به طور خودکار
errors
شی فرم را پر می کند:
<template x-if="form.invalid('email')"> <div x-text="form.errors.email"></div></template>
با استفاده از ویژگی فرم می توانید تعیین کنید که آیا فرم دارای خطا است
hasErrors
:
<template x-if="form.hasErrors"> <div><!-- ... --></div></template>
همچنین میتوانید با ارسال نام ورودی به فرمها
valid
و
invalid
توابع، تعیین کنید که آیا یک ورودی اعتبارسنجی شده است یا ناموفق:
<template x-if="form.valid('email')"> <span>✅</span></template> <template x-if="form.invalid('email')"> <span>❌</span></template>
یک ورودی فرم فقط زمانی معتبر یا نامعتبر ظاهر می شود که تغییر کند و پاسخ تأیید اعتبار دریافت شود.
شما می توانید با بررسی ویژگی فرم تعیین کنید که آیا درخواست ارسال فرم در حال پرواز است یا خیر
processing
:
<button :disabled="form.processing"> Submit</button>
جمع آوری مجدد داده های فرم قدیمی
در مثال ایجاد کاربر که در بالا بحث شد، ما از Precognition برای انجام اعتبارسنجی زنده استفاده می کنیم. با این حال، ما در حال انجام یک ارسال فرم سنتی سمت سرور برای ارسال فرم هستیم. بنابراین، فرم باید با هر ورودی "قدیمی" و خطاهای اعتبار سنجی که از ارسال فرم سمت سرور بازگردانده شده است پر شود:
<form x-data="{ form: $form('post', '/register', { name: '{{ old('name') }}', email: '{{ old('email') }}', }).setErrors({{ Js::from($errors->messages()) }}),}">
از طرف دیگر، اگر میخواهید فرم را از طریق XHR ارسال کنید، میتوانید از تابع فرم استفاده کنید
submit
که یک وعده درخواست Axios را برمیگرداند:
<form x-data="{ form: $form('post', '/register', { name: '', email: '', }), submit() { this.form.submit() .then(response => { form.reset(); alert('User created.') }) .catch(error => { alert('An error occurred.'); }); }, }" @submit.prevent="submit">
پیکربندی Axios
کتابخانه های اعتبارسنجی Precognition از سرویس گیرنده
Axios
HTTP برای ارسال درخواست ها به باطن برنامه شما استفاده می کنند. برای راحتی، در صورت نیاز برنامه شما، نمونه Axios ممکن است سفارشی شود. برای مثال، هنگام استفاده از
laravel-precognition-vue
کتابخانه، میتوانید سرصفحههای درخواست اضافی را به هر درخواست خروجی در فایل برنامه خود اضافه کنید
resources/js/app.js
:
import { client } from 'laravel-precognition-vue'; client.axios().defaults.headers.common['Authorization'] = authToken;
یا اگر قبلاً یک نمونه Axios پیکربندی شده برای برنامه خود دارید، ممکن است به Precognition بگویید که به جای آن از آن نمونه استفاده کند:
import Axios from 'axios';import { client } from 'laravel-precognition-vue'; window.axios = Axios.create()window.axios.defaults.headers.common['Authorization'] = authToken; client.use(window.axios)
کتابخانههای Precognition با طعم Inertia فقط از نمونه پیکربندیشده Axios برای درخواستهای اعتبارسنجی استفاده میکنند. فرم های ارسالی همیشه توسط اینرسی ارسال می شوند.
سفارشی کردن قوانین اعتبارسنجی
با استفاده از روش درخواست، می توان قوانین اعتبارسنجی اجرا شده در طول یک درخواست پیش شناختی را سفارشی کرد
isPrecognitive
.
به عنوان مثال، در یک فرم ایجاد کاربر، ممکن است بخواهیم اعتبار سنجی کنیم که رمز عبور فقط در فرم ارسال نهایی "غیرقابل نفوذ" است. برای درخواستهای اعتبارسنجی پیششناختی، ما به سادگی تأیید میکنیم که رمز عبور لازم است و حداقل 8 کاراکتر دارد. با استفاده از
isPrecognitive
متد، میتوانیم قوانین تعریفشده توسط درخواست فرم خود را سفارشی کنیم:
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest;use Illuminate\Validation\Rules\Password; class StoreUserRequest extends FormRequest{ /** * Get the validation rules that apply to the request. * * @return array */ protected function rules() { return [ 'password' => [ 'required', $this->isPrecognitive() ? Password::min(8) : Password::min(8)->uncompromised(), ], // ... ]; }}
مدیریت آپلود فایل
بهطور پیشفرض، Laravel Precognition فایلها را در طول درخواست اعتبارسنجی پیششناختی آپلود یا تأیید نمیکند. این اطمینان حاصل می کند که فایل های بزرگ به طور غیر ضروری چندین بار آپلود نمی شوند.
به دلیل این رفتار، باید اطمینان حاصل کنید که برنامه شما قوانین اعتبار سنجی درخواست فرم مربوطه را سفارشی می کند تا فیلد را فقط برای ارسال کامل فرم مورد نیاز تعیین کند:
/** * Get the validation rules that apply to the request. * * @return array */protected function rules(){ return [ 'avatar' => [ ...$this->isPrecognitive() ? [] : ['required'], 'image', 'mimes:jpg,png' 'dimensions:ratio=3/2', ], // ... ];}
اگر میخواهید فایلها را در هر درخواست اعتبارسنجی قرار دهید، میتوانید
validateFiles
تابع را در نمونه فرم سمت کلاینت خود فراخوانی کنید:
form.validateFiles();
مدیریت عوارض جانبی
هنگام افزودن میانافزار به مسیر، باید در نظر داشته باشید که آیا در
سایر
HandlePrecognitiveRequests
میانافزارها عوارض جانبی وجود دارد
که باید در طول یک درخواست پیششناختی نادیده گرفته شوند.
برای مثال، ممکن است میانافزاری داشته باشید که تعداد کل «تعاملهای» هر کاربر با برنامه شما را افزایش میدهد، اما ممکن است نخواهید درخواستهای پیششناختی بهعنوان یک تعامل حساب شوند. برای انجام این کار، ممکن است روش درخواست را
isPrecognitive
قبل از افزایش تعداد تعامل بررسی کنیم:
<?php namespace App\Http\Middleware; use App\Facades\Interaction;use Closure;use Illuminate\Http\Request; class InteractionMiddleware{ /** * Handle an incoming request. */ public function handle(Request $request, Closure $next): mixed { if (! $request->isPrecognitive()) { Interaction::incrementFor($request->user()); } return $next($request); }}
آزمایش کردن
اگر میخواهید در تستهای خود درخواستهای پیششناختی داشته باشید، لاراول
TestCase
دارای
withPrecognition
کمکی است که سربرگ درخواست را اضافه میکند
Precognition
.
بهعلاوه، اگر میخواهید ادعا کنید که یک درخواست پیششناختی موفقیتآمیز بوده است، بهعنوان مثال، هیچ خطای اعتبارسنجی را برنگرداند، میتوانید از روش
assertSuccessfulPrecognition
روی پاسخ استفاده کنید:
it('validates registration form with precognition', function () { $response = $this->withPrecognition() ->post('/register', [ 'name' => 'Taylor Otwell', ]); $response->assertSuccessfulPrecognition(); expect(User::count())->toBe(0);});
public function test_it_validates_registration_form_with_precognition(){ $response = $this->withPrecognition() ->post('/register', [ 'name' => 'Taylor Otwell', ]); $response->assertSuccessfulPrecognition(); $this->assertSame(0, User::count());}