راکت

route یکسان

9 پاسخ

سلام به همه دوستان
من توی پروژم نیاز دارم routeهای یک شکل با کنترلرهای مختلف داشته باشم. همچین چیزی اصلا توی لاراول 5.7 شدنیه یا نه؟!!
اگر امکانش هست ممنون میشم بگید چطوری

ثبت پرسش جدید

پاسخ‌ها

9
سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

میتونی یکی رو post و دیگری رو get قرار بدی ولی به نظرم کار درستی نیست اگر میخوای یک روت با دوشرط متفاوت در کنترلرت->متدت بساز.

MReza
MReza
@mohamadreza.aletaha

راه اول جدا از نادرست بودنش شدنی نیست جفتش باید get باشه. در رابطه با شرط هم بهش فکرکردم ولی چیزی نیست که بخوام روش شرط بزارم.
درکل قضیه اینطوریه که میخوام route به این شکل باشه مثلا: countries/foods/aaa که اولی دسته بندی هست دومی زیر دسته و در آخر هم slug پست مربوط به این زیردسته. با این حالت مشکلی ندارم مشکل جاییه که خود دسته اصلی یعنی countries میتونه پست داشته باشه پس route باید به این شکل باشه مثلا: countries/aaa

شاید پاسخ شما همین‌جا باشد

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

نمیدونم متوجه منظورت شدم یا خیر
ببین برای مورد اولت که اسلاگ داره میتونی این شکلی بنویسی

Route::get('/{countries}/{foods}/{slug}', 'CategoryController@index');

و برای پست های اون دسته

Route::get('/{countries}/{slug}', 'CategoryController@post');

تست نکردم این کدها رو میتونی تست کنی

MReza
MReza
@mohamadreza.aletaha

این درست ولی یه حالت دیگه هم هست: countries/foods که نمایش پست های زیردسته میشه
اگر بخوام اینو بزارم با countries/slug که نوشتی به مشکل میخورم. که دقیقا مشکلم همینه. هر دو route رو میخوام
ممنون از پاسخت

MReza
MReza
@mohamadreza.aletaha

کسی راه حل دیگه ای سراغ نداره؟

Amir m
Amir m
@owner

تخصص: برنامه نویس

راهی که آقای @juza66 گفتند کاملا صحیحه.
و من همون راه رو یکم تغییر میدم که شما متوجه بشید منظورشون چیه.
از آپشنال پارامتر استفاده کنید: (Optional Parameters

Route::get('/countries/{foods?}/{slug}?', 'CategoryController@index');

و در کنترلر میتونید چک کنید فرضا اگه slug ست نشده بود، پست های همون رو نشون بدید. برای این کار یه دیفالت ولیو نال میدید داخل کنترلرتون:

public function index($foods = null, $slug = null)
{
    if (!$foods) {
        // show country posts
    }

    if (!$slug) {
        // show sub posts
    }

    // do other stuff
}

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

MReza
MReza
@mohamadreza.aletaha

@proamirm ممون از شما
در رابطه با داکیومنت قبل از اینکه اینجا سوالی مطرح کنم به اندازه ی سوادم هم جستجو میکنم هم داکیومنتو میخونم که وقت دوستان گرفته نشه. اگر سوالم توی داکیومنت بوده بزارید به پای کم تجربگی و کم سوادی بنده ولی در رابطه با سوالم فکرکنم من بد توضیح دادم سعی میکنم واضح تر بنویسم.
ببینید من یه route دارم که به این شکل هست: countries/foods که پست های مربوط به زیردسته ی foods رو نمایش میده و یک route دیگه دارم که به این شکل هست: countries/{slug} که صفحه جزییات پست مربوط به دسته بندی countries رو نمایش میده.
میخوام ببینم چطوری میشه این ۲تا رو از هم تفکیک کرد. اگر باز جایی شو متوجه نشدید بفرمایید بیشتر توضیح بدم

Amir m
Amir m
@owner

تخصص: برنامه نویس

بله متوجه شدم چی میخواید.
ببینید روت های لاراول به ترتیب پردازش میشه. از بالا به پایین دونه دونه چک میکنه، اولین روتی که مچ بشه با آدرس، کنترلر صدا زده میشه.

Route::get('countries/foods', function () {
    return "Oh ok, you want to check Foods.";
});

Route::get('countries/{slug}', function ($slug) {
    return "Do you asked about {$slug} ?";
});

نتیجه به این شکله:
alt text
alt text

میبینید که foods جدا پردازش شده، و باقی به روت دوم میرن تا پردازش بشن

MReza
MReza
@mohamadreza.aletaha

خب اگر من پستی داشته باشم که slug واژه foods باشه هم باز این جدا پردازش میشه؟!
نکته ی دیگه ای که هست اینکه مسیر countries/foods هم استاتیک نیست و به شکل داینامیک ساخته میشه یعنی از طریق همون countries/{slug}

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام