رتبه موضوع:
  • 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 تو ورژن جدید اینطوری شده یا نه اون مسیری که شما اون بالا گفتین یه چیزه اینی که من گفتم یه چیزه دیگست. ؟
پاسخ
 


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش فارسی لاراول ۵ alihossein 6 3,206 دیروز, 09:52 AM
آخرین ارسال: farhad
  گرفتن آپدیت های وب هوک تلگرام در لاراول Mr.AMiR 1 26 05-11-2017, 11:30 AM
آخرین ارسال: Mr.AMiR
  بهترین پکیج acl برای لاراول چیست homeily@gmail.com 3 154 05-08-2017, 09:27 AM
آخرین ارسال: Geppeto
  لینک فایل های css و js در لاراول saeed.rahgooy@gmail.com 1 41 05-01-2017, 07:50 PM
آخرین ارسال: zootech
  ساخت authentication شخصی یا استفاده از authentication لاراول meysam_biz 0 64 03-19-2017, 05:38 PM
آخرین ارسال: meysam_biz
  درخواست راهنمایی : تعریف سطوح دسترسی کاربری در لاراول Bvk.Programmer 11 1,016 02-16-2017, 10:09 PM
آخرین ارسال: ansar
  # سوال : آموزش ساخت ربات تلگرام با پکیج irazasyed/telegram-bot-sdk Bvk.Programmer 1 432 02-16-2017, 09:55 PM
آخرین ارسال: ansar
  آموزش اعتبار سنجی در لاراول 5 alihossein 4 1,020 11-20-2016, 07:12 AM
آخرین ارسال: حمید رﺽا کمالی
  نحوه ایجاد Token-Based Authentication(oauth2) در لاراول با استفاده از passport anonymox 0 155 11-12-2016, 06:27 AM
آخرین ارسال: anonymox
  اجرای کوئری در لاراول amirbakhtiari 1 108 11-06-2016, 07:50 AM
آخرین ارسال: hamo

پرش به انجمن:


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

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

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