رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش روتینگ routing در لاراول 5
#1
از مزیت های فریم ورک لاراول نسبت به سایر فریمورک های PHP مبحث Routing آن است که می توان مدیریت خوبی روی مسیرها داشت. در مسیر app/Http و فایل routes.php می توانیم تمامی مسیرهای برنامه را در آنجا تعریف و مدیریت کنیم.این فایل توسط کلاس App\Providers\RouteServiceProvider بارگزاری میشود.

کد پی‌اچ‌پی:
Route::get('/', function()
{
 
   return 'Hello World';
}); 

کلاس Route چند متد دارد که نوع درخواست http را مشخص میکند. در مثال بالا متد get فقط در خواست های GET به این مسیر را قبول میکند. سایر متدها که نوع درخواست http را مشخص میکنند post , put, patch, delete می باشند. این متد دوتا پارامتر می گیرد که اولی مسیری است که بعد از نام دامنه سایت می آید مثلا در آدرس http://www.example.com/about مسیری که وارد میکنیم about است. 

در پارامتر دومی هم می توانیم بدون استفاده از کنترلر و اکشن و با دادن یک تابع بی نام در همین روتر آن را مدیریت کنیم. 


کلاس Route دارای متد دیگری به نام match هست که می توانیم چند نوع درخواست http را به یک مسیر مجاز کنیم در مثال زیر مسیر هردونوع درخواست GET و POST را قبول می کند :



کد پی‌اچ‌پی:
Route::match(['get''post'], '/', function()
{
 
   return 'Hello World';
}); 
در صورتی که بخواهیم مسیر همه در خواست ها را قبول کنید از متد any استفاده میکنیم مثلا آدرس http://www.example.com/foo هر درخواستی را قبول میکند :

کد پی‌اچ‌پی:
Route::any('foo', function()
{
 
   return 'Hello World';
}); 


HTML درخواست های PUT , DELETE یا PATCH را پشتیبانی نمی کند برای اینکه یک فرم HTML را با این متدها تعریف کنیم کافیه یک تگ input از نوع hidden و با نام method_ تعریف میکنیم و به value آن یکی از مقادیر PUT, DELETE, PATCH را بدهید مثلا:

کد پی‌اچ‌پی:
<form action="/foo/bar" method="POST">
 
   <input type="hidden" name="_method" value="PUT">
 
   <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
</
form


در مثال بالا آدرس http://www.example.com/foo/bar در روتر با متد put قابل دریافت است که می توانیم برای DELETE , PATCH هم به همین صورت عمل کنیم. کاربرد این متدها را در بخش کنترلر ها تشریح خواهم کرد. همچنین یک تگ از نوع مخفی به نام _token هم در فرم وجود دارد که در یک پست جداگانه در مورد فرم ها و کار با آنها توضیح خواهم داد.



مسیر با پارامتر
به همراه مسیر می توانیم هر تعداد پارامتر را هم ارسال کنیم فقط کافی است نام پارامترها را داخل آکولاد قرار دهیم. به مثال های زیر توجه کنید: 


کد پی‌اچ‌پی:
Route::get('user/{id}', function($id)
{
 
   return 'User '.$id;
});
 
Route::get('user/{name?}', function($name null)
{
 
   return $name;
});
 
Route::get('user/{name?}', function($name 'John')
{
 
   return $name;
}); 


در مثال های بالا همانطور که مشاهده کردید می توانیم برای پارامترها یک مقدار پیش فرض یا null هم در نظر گرفت تا درصورت وارد نکردن مقداری برای پارامتر در url خطایی ایجاد نشود. همچنین باید جلوی نام پارامتر های اختیاری یک علامت ? قرار دهیم.


افزودن عبارت منظم به پارامترها
می توانیم با افزودن متد where به انتهای متد get برای هر پارامتر یک عبارت منظم هم تعریف کرد تا مثلا id فقط مقدار عدد مورد قبول باشد. در صورتی که چند پارامتر را بخواهیم برایش عبارت منظم تعریف کنیم آنها را داخل آرایه قرار می دهیم.


کد پی‌اچ‌پی:
Route::get('user/{id}/{name}', function($id$name)
{
 
   //
})
->
where(['id' => '[0-9]+''name' => '[a-z]+']) 


همچنین می توانیم برای یک پارامتر خاص در کل برنامه یک عبارت منظم عمومی تعریف کنیم به این صورت که در کلاس RouteServiceProvider در دایرکتوری app/Providers در متد boot این عبارت را قرار دهیم مثلا در مثال زیر کاربر در routing هرجایی از پارامتر id استفاده کرد فقط مجاز به دادن مقدار عددی به آن است و دیگر مانند بالا نیاز به تعریف متد where نیست :

کد پی‌اچ‌پی:
$router->pattern('id''[0-9]+'); 


مسیردهی به یک کنترلر و اکشن 


کد پی‌اچ‌پی:
Route::get('user/{id}''UserController@showProfile'); 


در پارامتر دوم فقط کافی است بین نام کلاس کنترلر و اکشن یک علامت @ قرار دهیم.

نامگزاری مسیر 

با استفاده از کلمه as می توانیم برای مسیر یک نام هم تعریف کنیم و همچنین با استفاده از uses می توانیم آن را به اکشن و کنترلر خاصی هدایت کنیم.


کد پی‌اچ‌پی:
Route::get('user/profile', [
 
   'as' => 'profile''uses' => 'UserController@showProfile'
]); 


از کاربردهای نامگزاری مسیر برای ایجاد و ساختن url است که می توانیم با استفاده از تابع کمکی route نام مسیر را به آن بدهیم مثلا در مثال بالا با دادن نام profile آدرسhttp://www.example.com/user/profile ایجاد خواهد شد و همچنین برای ریدایرکت به یک مسیر هم کاربرد دارد.


کد پی‌اچ‌پی:
$url route('profile');
 
$redirect redirect()->route('profile'); 

مسیردهی گروهی

در لاراول می توانیم یک دسته از مسیرها را که مثلا در یک قسمت از url خود مشترک هستند یا middleware مشترکی دارند و یا دارای یک namespace مشترک هستند را در یک گروه قرار دهیم. همجنین می توانیم sub-domain ها را از این طریق مدیریت کنیم.

کد پی‌اچ‌پی:
Route::group(['prefix' => 'admin'], function()
{
 
   Route::get('users', function()
 
   {
 
       // Matches The "/admin/users" URL
 
   });
}) 


در مثال بالا تمامی مسیرهایی که با admin شروع می شوند را داخل این گروه قرار می دهیم.


برای اطلاعات و مثال های بیشتر در این مورد می توانید به اینجا مراجعه کنید



(با تشکر از حامد آریایی)
قوانین انجمن لاراولیستا  | شماره تماس :‌09124783045 |‌ تلگرام :‌ 09377869283
پاسخ
#2
(0|\+98)?([ ]|,|-|[()]){0,2}9[1|2|3|4]([ ]|,|-|[()]){0,2}(?:[0-9]([ ]|,|-|[()]){0,2}){8} در لاروال 5.2 این regex رو مینویسم ولی error preg_match(): No ending matching delimiter ')' foundرو میدهد! ریگولار ایکس پرشن برای شماره تلفن !!!!
لطفا راهنمایی کنید
پاسخ
#3
باسلام و تشکر از مطالبتون. تو ورژن 5. 3 یه پوشه جدید هست به نام routes که تو آموزشای جاهای دیگه دیدم مسیر دادن و تو فایل web. Php انجام میدن
یعنی routes/web. Php تو ورژن جدید اینطوری شده یا نه اون مسیری که شما اون بالا گفتین یه چیزه اینی که من گفتم یه چیزه دیگست. ؟
پاسخ
 


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش اعتبار سنجی در لاراول 5 alihossein 4 771 11-20-2016, 07:12 AM
آخرین ارسال: حمید رﺽا کمالی
  آموزش کار با دیتابیس در لاراول 5 alihossein 6 1,552 10-27-2016, 01:01 PM
آخرین ارسال: sempaisaleh
  آموزش Migration در لاراول 5 alihossein 9 1,158 08-15-2016, 04:17 PM
آخرین ارسال: Naser.SherafatiNia
  آموزش فارسی لاراول ۵ alihossein 4 2,856 07-22-2016, 04:16 PM
آخرین ارسال: elham_malekmohamadi
  # سوال : آموزش ساخت ربات تلگرام با پکیج irazasyed/telegram-bot-sdk Bvk.Programmer 0 234 04-25-2016, 04:54 PM
آخرین ارسال: Bvk.Programmer
  درخواست آموزش کار با پکیج intervention/image Bvk.Programmer 6 492 04-18-2016, 05:52 PM
آخرین ارسال: hamo
Rainbow آموزش : پکیچ کاربردی ajax-blade Bvk.Programmer 0 200 02-15-2016, 06:04 PM
آخرین ارسال: Bvk.Programmer
  آموزش Session ها در لاراول 5 alihossein 1 662 01-29-2016, 12:33 PM
آخرین ارسال: SajadDP
  آموزش کنترلر ها در لاراول 5 alihossein 3 967 01-07-2016, 02:28 PM
آخرین ارسال: Bvk.Programmer
  آموزش آپلود فایل در لاراول 5 alihossein 3 1,017 12-09-2015, 06:13 AM
آخرین ارسال: abbasshahrokhi

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

درباره انجمن فریم ورک لاراول

انجمن لاراولیستا به عشق توسعه دهنده ها و علاقمندان به این فریم ورک محبوب ایجاد شده و امیدواریم با نظرات خوبتون ما رو در بهبود کار یاری کنید. در ضمن خیلی هم خوشحال میشیم شما هم در توسعه این انجمن سهمی داشته باشید.