آموزش مقدماتی لاراول - کنترلرها - Controllers
همانطور که در آموزش قبلی گفتیم عملیات ارسال اطلاعات و پردازش داده در routeها منطقی نیست خاصه اگه قرار باشه با اطلاعات زیادی سروکار داشته باشیم. در اینجا صحبت از یه موجود دیگه در لاراول که برای همین منظور طراحه شده، به میون میاد!
در ادامه و در این مقاله در مورد کنترلها در لاراول صحبت خواهم کرد!!!
چیزی که لازم است در مورد کنترولرها در لاراول بدونیم اینه که کنترولرها کلاسهایی هستند که دیتا رو برای ارسال به view آماده میکنند. برای ایجاد یک کنترولر از دستور artisan
استفاده میکنیم. این دستور یکی از مهمترین دستوراتی هست که در ادامه باهاش خیلی کار داریم. اگه خاطرتون باشه ما از دستور php artisan serve
برای ایجاد یک سرور محلی استفاده کردیم. اگه دستور php artisan
رو در مسیر اصلی پروژه لاراولمون وارد کنیم، تمامی عملیاتی که میتوانیم با آن انجام بدیم رو مشاهده خواهیم کرد.
از طرفی هر دستور artisan
توضیحاتی رو بعنوان راهنما داخل خودش داره که خوندنش پیش از کار کردن ضرری نداره برای نمونه اگر بخواهیم توضیحات مربوط به کنترولر رو ببینیم خروجی بصورت زیر خواهیم داشت:
php artisan help make:controller
------------------------------------
Description:
Create a new controller class
Usage:
make:controller [options] [--] <name>
Arguments:
name The name of the class
Options:
--api Exclude the create and edit methods from the controller.
--type=TYPE Manually specify the controller stub file to use.
--force Create the class even if the controller already exists
-i, --invokable Generate a single method, invokable controller class.
-m, --model[=MODEL] Generate a resource controller for the given model.
-p, --parent[=PARENT] Generate a nested resource controller class.
-r, --resource Generate a resource controller class.
-h, --help Display help for the given command. When no command is given display help for the list command
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
root@laravel-basic:
آرگومان اصلی این دستور همون نام کنترولر هست. در مورد باقی خصیصهها توضیحات خودش مشخصه ولی در آینده باهاشون کار داریم. فعلا همینقدر کافیه!!!
خب بریم سر وقت پروژه خودمون. من میخوام برای مثال مقاله قبلی یه کنترولر بنویسم که بجای اینکه از داخل route دیتا رو به view ارسال کنم از طریق کنترولر این اتفاق بیوفته. برای این منظور ابتدا از طریق دستور زیر کنترولر رو ایجاد میکنیم:
php artisan make:controller UserController
بعد به مسیر app/Http/Controllers/UserController.php
میریم جایی که کنترولرها اونجا ذخیره میشن.


توضیح کمی فنی: namespaceها اساسا جزو ویژگیهای لاراول نیستند بلکه جزو توابع هسته اصلی PHP بحساب میان، و کارکردشون هم گروهبندی کلاسها و توابع و ... هست. یکی از محدودیتهای PHP اینه که شما اجازه ندارید کلاسهای همنام داشته باشید ولی با کمک namespace و ایجاد دایرکتوریهای متعدد این امکان فراهم میشه!
خب در ادامه یک تابع به نام list ایجاد میکنیم و اطلاعاتی که داشتیم رو با کمک تابع کمکی view به مسیر user که از پیش ساختیم ارسال میکنیم:


در نهایت کافیه به route وب برگردیم و اسم کلاس و تابعی که این خروجی رو برمیگردونه رو به مسیر قبلیمون بدیم.
نکته مهم: در این سری از آموزش مقدماتی من از لاراول ۸ استفاده کردم. این نسخه نسبت به نسخه پیشین یعنی نسخه ۷ تغییراتی داره که در خلال آموزشها به آنها اشاره میکنم. یکی از این موارد نحوه تعریف کنترلر در route هست. علت این تغییر خطاهایی میبود که توسعهدهندگان موقع تعریف namespaceها ممکن بود باهاش مواجه بشوند. حالا در نسخه ۸ و بدون هیچ دردسری کافیه کلاس مربوطه رو در route وارد کنید.
// in laravel 8
Route::get('users', [\App\Http\Controllers\UsersController::class, 'list']);
// in laravel 7
Route::get('users', 'UsersController@list');
به همین سادگی!


در این آموزش با نحوه ارسال داده از طریق کلاس کنترلر در دو نسخه متفاوت ۷ و ۸ لاراول در مسیرها و درون view آشنا شدید. در مقاله بعدی در مورد ساختار blade نکات بیشتری رو خواهم گفت و برای پروژه فعلیمون چیدمان مناسبتری رو ایجاد میکنیم!