حمید روحانی
حمید روحانی
خواندن ۲ دقیقه·۳ سال پیش

laravel 9 - forced scoped bindings لاراول ۹

یکی از قابلیت های جذاب لاراول ۹ همین forced scope bindings هست که یه جورایی به معنای اتصال اجباری و ... معنی میشه


خب حالا این یعنی چی؟

کسایی که قبلا تجربه توسعه داشتند میدونند که بعضا ما میخوایم در لحظه نمایش پست ها و یا محصولات و یا هر چیز دیگه ای، قبلش چک کنیم که این پست متعلق به یوزر فعلی باشه، یعنی کاربرای دیگه نتونن پست های دیگران رو ببینند.


بیاین توی کد نشونتون بدم

  1. قدم اول ساخت مایگریشن
php artisan make:migration create_posts_table


public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->foreignIdFor(\App\Models\User::Class)->constrained()->onDelete('cascade'); $table->string('title'); $table->text('body'); $table->timestamps(); }); }

جالب هست بدونید با foreignIdFor میتونید به راحتی کلید خارجی بسازید و به تیبل مورد نظرتون بایندش کنید.


بریم سراغ وارد کردن دیتا داخل جدول پست ها

جدول پست ها
جدول پست ها


توی جدول فوق میبینید که ما ۱۰ تا پست داریم و ۱۰ تا یوزر و هر یوزر یک پست در جدول ما داره - خیلی ساده -


هدف: یوزر شماره ۱ پست اول را بتواند ببیند و پست های دیگر را نتواند ببیند


۲. مرحله بعد تعریف روت route

− حالت قبل از لاراول ۹

تعریف روت نمایش پست
تعریف روت نمایش پست


توی این حالت تمام پست ها بدون محدودیت قابل نمایش هست


پست شماره ۱ که مربوط به یوزر شماره ۱ می باشد
پست شماره ۱ که مربوط به یوزر شماره ۱ می باشد
پست شماره ۹ که مربوط به یوزر شماره  نمی باشد
پست شماره ۹ که مربوط به یوزر شماره نمی باشد


می بینید که توی این حالت با پاس دادن آی دی پست به یو آر ال میتونیم بدون هیچ محدودیتی پست رو ببینینم


− و اما حالت forced scope bindings


افزودن آی دی به انتهای متغیر پست
افزودن آی دی به انتهای متغیر پست


شما با این کار حالت force bind رو فعال می کنید و دیگه کاربر شماره ۱ نمیتونه پست شماره ۹ رو ببینه


پست شماره ۹ که مربوط به یوزر شماره ۱ نیست
پست شماره ۹ که مربوط به یوزر شماره ۱ نیست



به همین راحتی (:


در روتر یک راه حل دیگه هم داریم اونم اضافه کردن scopebindings انتهای روتمون هست بدین شکل:




امیدوارم مفید باشه براتون ((:

حمید روحانی

لاراول 9لاراولlaravellaravel 9forced scope bindings
PHP Developer - Web Developer
شاید از این پست‌ها خوشتان بیاید