بررسی کنترلرها در لاراول
در مقالات قبلی چندین بار در مورد کنترلرها صحبت کردیم. اما تمامی این مثال ها تا کنون در داخل کلوژرهای route بوده اند. اگر شما با الگوی MVC آشنا نیستید به تصویر 3.1 توجه کنید. کنترلرها در حقیقت کلاس هایی هستند که منطق یک یا چند مسیر(route) را در خود نگهداری می کنند. کنترلرها تمایل دارند تا routeهای مشابه را گروه بندی کنند به خصوص اگر اپلیکیشن مورد نظر از فرمت مرسوم CRUD استفاده می کند.
تشریح مدل MVC در لاراول
همان طور که در تصویر بالا مشاهده می کنید، ابتدا کاربر(user) درخواستی را به کنترلر ارسال می کند. سپس کنترلر با استفاده از مدل(Model) اطلاعاتی را از دیتابیس دریافت می کند و آنها را به کنترلر برمی گرداند. حالا کنترلر این اطلاعات را به view می دهد و view به کاربر نشان داده می شود.
عملیات CRUD چیست؟
کلمه ی CRUD سرنام واژه های create و read و update و delete است. این چهار مورد، یک سری عملیات اصلی هستند که اپلیکیشن های وب بر روی منابع انجام می دهند. بعنوان مثال با استفاده از عمل create می توان در یک سایت یک پست جدید ایجاد کرد و یا با استفاده از عمل update آن را آپدیت نمود و یا با استفاده از delete آن پست را حذف نمود.
می توانیم کنترلرها را به پلیس راهنمایی و رانندگی تشبیه کنیم که درخواست های HTTP اپلیکیشن ما را مسیردهی می کند. چون که درخواست های دیگری نیز وجود دارند، بهتر است تنها به کنترلرها تکیه نشود.
وظیفه ی اصلی یک کنترلر این است که منظور درخواست های HTTP را بفهمد دهد و آن درخواست ها را به بقیه ی اپلیکیشن ارائه دهد.
اجازه دهید تا یک کنترلر ایجاد کنیم. یکی از ساده ترین روش ها ی ایجاد یک کنترلر، استفاده از دستورات Artisan است. بنابراین در خط فرمان، دستورات زیر را وارد کنید:
php artisan make:controller TasksController
Artisan در لاراول چیست؟
در لاراول یک ابزار خط فرمان وجود دارد که Artisan نامیده می شود. از Artisan می توان برای migration (مهاجرت) و یا ایجاد کاربران و ایجاد دیگر رکوردهای دیتابیس یا دیگر کارها به صورت دستی استفاده نمود.
برای اطلاعات بیشتر در مورد Artisan به فصل 7 مراجعه کنید.
دستور بالا، یک فایل جدید به نام TasksController.php را در آدرس app/Http/Controllers ایجاد می کند. محتوای این فایل در مثال 3.19 نشان داده شده است:
(مثال 3.19)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class TasksController extends Controller
{
}
اکنون کدهای بالا را به صورت زیر تغییر دهید. یعنی یک متد public به نام ()home در آن قرار دهید که متنی را چاپ می کند:
(مثال 3.20)
<?php
use App\Http\Controllers\Controller;
class TasksController extends Controller
{
public function home()
{
return 'Hello, World!';
}
}
حالا همان طور که قبلا آموختیم، می خواهیم به این کنترلر یک route را متصل کنیم. درست مانند مثال 3.21 در زیر:
(مثال 3.21)
<?php
// routes/web.php
Route::get('/', 'TasksController@home');
حالا اگر به ریشه ی(/) سایت خود بروید، پیغام Hello World را مشاهده خواهید نمود.
در مثال 3.20 از یک فضای نام(namespace) برای اشاره به یک کلاس کنترلر استفاده کردیم که در حقیقت نام این کلاس App\Http\Controllers\TasksController است. اما در مثال 3.21 تنها از نام کلاس مورد نظر استفاده کرده ایم. این بدین معنی نیست که می توانیم با استفاده از نام کنترلرها به سادگی به آنها اشاره کنیم. بلکه به این معنی است که می توانیم به هنگام رجوع به کنترلرها، عبارت \App\Http\Controllers را نادیده بگیریم.
لاراول به طور پیش فرض، از فضای نام مذکور برای کنترلرها استفاده می کند. این یعنی اگر شما یک کنترلر با نام کامل App\Http\Controllers\API\ExercisesController داشته باشید، لازم نیست از فضای نام استفاده کنید. یعنی می توانید از API\ExercisesController در routeها استفاده کنید.
در مثال 3.22 می توانید یک متد کنترلر را مشاهده کنید:
// TasksController.php
...
public function index()
{
return view('tasks.index')
->with('tasks', Task::all());
}
این متد کنترلر، یک view را از آدرس resources/views/tasks/index.blade.php یا resources/views/tasks/index.php بارگذاری می کند و یک متغیر تکی به نام tasks را که حاوی نتیجه ی متد ()Task::all است به آن پاس می دهد. (این متد را Eloquent می گویند).
تولید خودکار کنترلرهای منبع در لاراول
اگر تاکنون از دستور php artisan make:controller در نسخه های لاراول قبل از 5.3 استفاده کرده باشید، انتظار دارید که این دستور به طور اتوماتیک متدهایی را برای تمام routeهای منبع پایه ایجاد کند. مثل متد ()create و ()update. حالا اگر بخواهیم این رفتار را در لاراول نسخه ی 5.3 داشته باشیم، می توانیم از دستور resource-- به هنگام ایجاد کنترلر مورد نظر استفاده کنیم؛ به مثال زیر توجه کنید:
php artisan make:controller TasksController --resource
- نوشته شده توسط احسان عباسی
- بازدید: 3112