آموزش مقدماتی لاراول - کنترلرها - 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 میریم جایی که کنترولرها اونجا ذخیره میشن.

Image for post
Image for post

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

خب در ادامه یک تابع به نام list ایجاد می‌کنیم و اطلاعاتی که داشتیم رو با کمک تابع کمکی view به مسیر user که از پیش ساختیم ارسال می‌کنیم:

Image for post
Image for post

در نهایت کافیه به route وب برگردیم و اسم کلاس و تابعی که این خروجی رو برمی‌گردونه رو به مسیر قبلیمون بدیم. 

نکته مهم:‌ در این سری از آموزش مقدماتی من از لاراول ۸ استفاده کردم. این نسخه نسبت به نسخه پیشین یعنی نسخه ۷ تغییراتی داره که در خلال آموزش‌ها به آن‌ها اشاره می‌کنم. یکی از این موارد نحوه تعریف کنترلر در route هست. علت این تغییر خطاهایی می‌بود که توسعه‌دهندگان موقع تعریف namespaceها ممکن بود باهاش مواجه بشوند. حالا در نسخه ۸ و بدون هیچ دردسری کافیه کلاس مربوطه رو در route وارد کنید.

// in laravel 8
Route::get('users', [\App\Http\Controllers\UsersController::class, 'list']);

// in laravel 7 
Route::get('users', 'UsersController@list'); 

به همین سادگی!

Image for post
Image for post

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