گرفتن ورودی از کاربر در لاراول

چاپ

دومین کاری که می توانیم در یک متد کنترلر انجام دهیم،  گرفتن ورودی از کاربر و انجام عملیات بر روی آن است. برای انجام این کار باید با چند مفهوم جدید آشنا شویم. ابتدا به کدهای زیر توجه کنید:

(مثال 3.23 اتصال اکشن های فرم)

// routes/web.php
Route::get('tasks/create', 'TasksController@create');
Route::post('tasks', 'TasksController@store');

توجه کنید که ما در حال متصل کردن tasks/create از نوع GET (که فرم را نمایش می دهد) به /tasks هستیم.

می توانیم فرض کنیم که متد ()create که در داخل کنترلر ما قرار دارد، تنها یک فرم(Form) را نمایش می دهد؛ پس اجازه دهید تا در مثال 3.24 به متد ()store نگاهی بیاندازیم:

// TasksController.php
...
public function store()
{
  $task = new Task;
  $task->title = Input::get('title');
  $task->description = Input::get('description');
  $task->save();
  return redirect('tasks');
}

 این مثال، از مدل های Eloquent و قابلیت ()redirect استفاده می کند؛ که در مورد آنها بعدا صحبت خواهیم نمود. اما کاری که در این مثال انجام داده ایم این است که، ابتدا یک Task جدید ایجاد کردیم؛ سپس داده های کاربر را دریافت کردیم و آنها را در داخل task قرار دادیم. و سپس آن را ذخیره کردیم. بعد به صفحه ای که تمامی task ها را نمایش می دهد، redirect شدیم. 

برای دریافت ورودی از کاربر با استفاده از POST، دو راه اصلی وجود دارد: 

1. روش Input facade: که در مثال بالا از آن استفاده کردیم. 

2. روش Request object: که در آینده در مورد آن صحبت خواهیم نمود. 

 


استفاده از facadeها در لاراول

اگر از مثال های این مقاله در داخل کنترلرها یا در داخل دیگر کلاس های php استفاده کرده باشید، ممکن است با یک پیغام خطا مواجه شوید مبنی بر اینکه facade مورد نظر یافت نشد(the facade cannot be found). دلیل این امر این است که facadeها در تمام namespaceها حضور ندارند. بلکه در فضای نام ریشه( root namespace) قابل دسترس هستند. بنابراین در مثال 3.24 نیاز داریم تا Input را (که یک facade است) در بالای فایل اضافه کنیم. برای انجام این کار دو راه وجود دارد. یا می توانیم فضای نام Input\ را اضافه کنیم و یا می توانیم فضای نام Illuminate\Support\Facades\Input را اضافه کنیم. بعنوان مثال داریم:

<?php
namespace App\Http\Controllers;
use Illuminate\Support\facades\Input;
class TasksController
{
  public function store()
  {
    $task = new Task;
    $task->title = Input::get('title');
    $task->description = Input::get('description');
    $task->save();

    return redirect('tasks');
  }

 همان طور که مشاهده می کنید، با استفاده از دستور Input::get می توانیم هر نوع اطلاعاتی را از کاربر دریافت کنیم، خواه این اطلاعات ارسالی از طریق Get باشد و خواه از طریق Post. برای هردوی این موارد، از دستور (Input::get('fieldName استفاده می شود. بنابراین اگر کاربر، در صفحه ی "add task" فیلدهای title و description را پر کند، ما با استفاده از یک facade به نام Input به آنها دسترسی خواهیم داشت و می توانیم آنها را در دیتابیس ذخیره کنیم و سپس return کنیم.