MReza
5 سال پیش توسط MReza مطرح شد
9 پاسخ

route یکسان

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


ثبت پرسش جدید
سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 5 سال پیش مطرح شد
0

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


MReza
@mohamadreza.aletaha 5 سال پیش مطرح شد
0

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


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 5 سال پیش آپدیت شد
1

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

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

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

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

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


MReza
@mohamadreza.aletaha 5 سال پیش مطرح شد
0

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


MReza
@mohamadreza.aletaha 5 سال پیش مطرح شد
0

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


Amir m
تخصص : برنامه نویس
@proamirm 5 سال پیش مطرح شد
0

راهی که آقای @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
@mohamadreza.aletaha 5 سال پیش مطرح شد
0

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


Amir m
تخصص : برنامه نویس
@proamirm 5 سال پیش مطرح شد
0

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

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
@mohamadreza.aletaha 5 سال پیش آپدیت شد
0

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


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

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