
با سلام در پست قبلی باهم دیدیم که چطوری یک مسیر تعریف کنیم و چطور اطلاعاتی رو از مسیر درخواست شده بگیریم و چطور برای پارامتر های مسیر خودمون شرط قرار بدیم.
اگه قرار باشه یک نرم افزار بسازیم ممکنه که از یک کلید مثل کلمه id در آدرس دهی های خودمون در طول برنامه زیاد استفاده کنیم. و میدونیم که مقدار مجاز برای id فقط عدد طبیعی است. پس باید برای هر آدرس دهیمون یک شرط بزاریم که این مساوی است با تکرار کد ها, در لاراول این امکان وجود داره که بشه بدون نیاز به این تکرار برای یک کلید خاص مثل id یک شرط قرار داد و از اون در طول برنامه استفاده کرد.
برای اینکار اول باید فایل RouteServiceProvider.php را باز کنید. این فایل در مسیر app/Providers قرار دارد. در این فایل فانکشن یا همان متو boot را پیدا کنید و بعد محتوای تابع را به اشن شکل تغییر بدید:
public function boot() { // Route::pattern('id', '[0-9]+'); // حواستون به این خط باشه parent::boot(); // این خط برای خوده تابع هست }
همون طور که می بینید ابتدا تابع pattern رو از کلاس Route صدا زدیم و بعد به عنوان آرگومان اول اون کلیدی رو که می خوایم واسش الگو تعریف کنید رو دادیم و در آرگومان دوم با عبارت های منظم تعریف کردیم که این کلید چه مقداری رو می تونه بگیره.دقت کنید که الگو هایی که تعریف می کنید حتما قبل ار خط زیر باشد:
parent::boot(); // این خط برای خوده تابع هست
در ابتدا باید یک کلاس ایجاد کنیم. برای این کار بهترین راه این است که خط فرمان خود را در ویندوز باز کنید و با استفاده از دستور زیر به پوشه روت لاراول خود وارد شوید:
cd C:\yourfolder\yourfolder\larave-lroot
بعد از کلمه cd باید آدرس لاراول خود را وارد کنید. سپس از خود لاراول کمک گرفته و کنترولر خود را ایجاد می کنیم: کد زیر را در خط فرمان وارد کنید:
php artisan make:controller NAMEofCONTROLLER
بجای عبارت NAMEofCONTROLLER باید نام کنترولر دلخواه خود را قرار دهید. حالا باید یک تابع در این کلاس تعریف کنید. اسم این تابع رو میزاریم index خب حالا می خواهیم از طریق آدرس دهی این متود را از کلاس خودمون صدا کنم به این شکل عمل می کنیم:
Route::get('/call-method', "NAMEofClass@NAMEofMethod");
به همین راحتی یعنی یک رشته به عنوان آرگومان دوم به تابع مورد نظر که اینجا get هست میدیم که اول نام کلاس رو می نویسیم بعد @ میزاریم و بعد هم نام تابع درون کلاس رو. اگه بخواید اطلاعاتی به متود پاس داده بشه باید به این شکل کار کنید:
Route::get('/call-method/{id}', "NAMEofClass@NAMEofMethod");
الآن مقداری که کاربر بعد از / دوم وارد می کنه به عنوان یک مقدار به اولین پارامتر تابع پاس داده میشه.
این تمام متود هایی از کلاس Route هست که میشه برای آدرسی دهی استفاده کرد:
Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback);
همون طور که میبینید در تمام اونا اول آدرس دهی رو مشخص می کنید بعد می گید اگه این آدرس فراخوانی شد چه کاری انجام شود.
آدرس دهی از طریق متود پست تنها وقتی کار می کنه که فرمی به آدرس تعریف شده ارسال بشه و نوع فرم هم پست باشه. مثل فرم زیر:
<form action="/post-test" method="post"> {{csrf_field()}} // به این کد توجه کنید <input type="text" placeholder="name" name="UserName"> </form>
فرم ها را باید در فایل های ویو بگذارید که در آدرس resources->views قرار دارند. حتما پسوند .blade.php را برای فایل ها ویو خود بگذارید تا بتوانید از امکاناتش مثل استفاده از {{}} بهره ببرید. توی فرم های خودتون مجبورید از تابع csrf_field() استفاده کنید این تابع امنیت فرم را افزایش می دهد. اگر از این تابع استفاده نکنید با یک ارور روبرو میشید.
حالا فکر کنید که برای فرم بالا یک آدرس دهی درست کنیم مثل کد زیر:
Route::post('/post-test', function () {
echo 'hello';
});
اگه فرم مورد نظر رو ارسال کنیم. میبینیم که متن hello چاپ شده.
پایان قسمت دوم