💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ آرمین صادقیان
دسترسی به ویدیو فعلی
محسن موحد حل شده توسط محسن موحد

سلام. وقت بخیر

من متوجه نمیشم که چجوری با استفاده از

 $this->video

 توی کلاس UpdateVideoRequest میتونیم به ویدیو فعلی دسترسی داشته باشیم؟

class UpdateVideoRequest extends StoreVideoRequest
{
    public function rules(): array
    {
        return array_merge(parent::rules(), [
            'slug' => 'required|alpha_dash|' . Rule::unique('videos', 'slug')->ignore($this->video),
        ]);
    }
}

سلام،
در لاراول، هنگامی که از Route Model Binding استفاده می‌کنید، مدل مربوط به روت فعلی به طور خودکار توسط لاراول تزریق و در دسترس قرار داده می‌شود. این امکان برای FormRequest‌ها نیز وجود دارد، به این معنی که اگر نام پارامتر روت و نام ویژگی در FormRequest با هم مطابقت داشته باشند، شما می‌توانید به طور مستقیم به آن مدل دسترسی پیدا کنید.

برای مثال، فرض کنید شما یک روت با پارامتر {video} دارید که به یک متد کنترلر متصل است و این متد از UpdateVideoRequest برای اعتبارسنجی درخواست استفاده می‌کند:

Route::post('/videos/{video}', 'VideoController@update');

در این حالت، اگر UpdateVideoRequest به عنوان نوع درخواست در متد update کنترلر VideoController تعریف شود، لاراول به طور خودکار مدل Video متناظر با پارامتر {video} را دریافت و آن را در داخل نمونه UpdateVideoRequest قرار می‌دهد.

بنابراین، با استفاده از $this->video در داخل کلاس UpdateVideoRequest، به مدل Video مرتبط با درخواست دسترسی پیدا می‌کنید. این امکان برای انجام اعتبارسنجی‌های پیچیده‌تر بسیار مفید است، مانند موردی که شما می‌خواهید اطمینان حاصل کنید که slug ارسالی در درخواست برای به‌روزرسانی یکتا است، اما نباید ویدیو فعلی (که قصد به‌روزرسانی آن را دارید) را در نظر بگیرد:

Rule::unique('videos', 'slug')->ignore($this->video),

این خط کد، اعتبارسنجی unique را برای ستون slug در جدول videos اعمال می‌کند، اما با استفاده از متد ignore، ویدیو فعلی که در حال به‌روزرسانی آن هستید را از این بررسی مستثنی می‌کند.

بهترین پاسخ
محسن موحد ۱۲ اسفند ۱۴۰۲، ۲۳:۲۹