موضوع این مقاله، آموزش لاراول Laravel گام به گام پروژه محور ۲۰۱۹ است. در این مثال، از انواع مختلف ورودی‌ها مانند دکمه‌ی رادیویی، checkbox و select box استفاده کرده‌ایم. عملیات CRUD در لاراول بسیار پراهمیت هستند، در عین حال انواع ورودی‌های بسیار متنوعی دارند. در این مثال، از لاراول با نسخه‌ی ۵.۵ استفاده کرده‌ایم. داده‌ها را در دیتابیس MySQL ایجاد می‌کنیم، می‌خوانیم و آپدیت می‌کنیم. اگر در کار با لاراول مبتدی هستید، ممکن است این نوشته برای شما سودمند باشد.

پیش‌نیازهای نصب

  • PHP با نسخه‌ی ۷.۰.۰ یا بالاتر
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension

آموزش پروژه صفر تا صد لاراول Laravel در سطح مقدماتی

 

 مرحله‌ی اول: نصب فریمورک لاراول

composer create-project --prefer-dist laravel/laravel coins

با نصب لاراول یک سلسله مرتبه (Hierarchy) به وجود آمده و تمام موارد مربوط به لاراول نیز نصب خواهند شد.

 

مرحله‌ی دوم: راه‌اندازی دیتابیس MySQL در فایل .env

یک دیتابیس در MySQL بسازید و سپس به ادیتور سوئیچ کرده و فایل .env را باز کتید.

// .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

من بر روی دیتابیس محلی تنظیم کرده‌ام.

اکنون، دو جدول (table) که بوسیله‌ی Laravel Switch در ترمینال‌ها به وجود آمده‌اند را مایگریت (migrate) کرده و دستور زیر را تایپ کنید.

php artisan migrate

بالای دستور دو جدول جدید در دیتابیس ساخته خواهند شد.

  • Users
  • Password_resets

مرحله‌ی سوم: یک مدل و فایل migration برای جدول فرم‌ها بسازید.

در ترمینال، دستور زیر را تایپ کنید.

php artisan make:model Form -m

با انجام این کار، دو فایل به وجود خواهند آمد.

  • php model
  •  Create_forms_table migration file
پیشنهاد فرانش به شما
15 فناوری که شیوهٔ کار برنامه‌نویس‌ها رو تغییر می‌ده

باید برای جدول فرم‌ها، Schema بسازید. بنابراین آن را به  coins >> database >> migrations >> create_forms_table هدایت کنید.

// create_forms_table

public function up()
    {
        Schema::create('forms', function (Blueprint $table) {
            $table->increments('id');
            $table->string('coinname');
            $table->string('coinprice');
            $table->string('radio');
            $table->string('dropdown');
            $table->string('checkbox');
            $table->timestamps();
        });
    }

اکنون جدول را migrate کنید.

php artisan migrate

می‌توانید در دیتابیس، جدول forms را ببینید.

 

 

مرحله‌ی چهارم: یک فایل view برای افزودن داده‌ی فرم به دیتابیس ایجاد کنید.

پوشه‌ای به نام forms بسازید و سپس فایلی در resources >> views >> forms >> create.blade.php ایجاد کنید و کد زیر را به آن اضافه کنید.

<!-- create.blade.php -->

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Laravel 5 CRUD Tutorial With Example From Scratch </title>
    <link rel="stylesheet" href="{{asset('css/app.css')}}">
  </head>
  <body>
    <div class="container">
      <h2>Create A Form</h2><br  />
      <form method="post">
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <label for="CoinName">CoinName:</label>
            <input type="text" class="form-control" name="coinname">
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4">
              <label for="CoinPrice">CoinPrice:</label>
              <input type="text" class="form-control" name="coinprice">
            </div>
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4" style="margin-left:38px">

                 <lable>Keep</lable>
                   <input type="radio" name="radio" value="keep">
                 <lable>Port</lable>
                     <input type="radio" name="radio" value="port">
            </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4" style="margin-left:38px">
                <lable>Level</lable>
                <select name="dropdown">
                  <option value="beginner">Beginner</option>
                  <option value="intermediate">Intermediate</option>
                  <option value="advance">Advance</option>  
                </select>
            </div>
        </div>
         <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4" style="margin-left:38px">
               <div class="checkbox">
                  <label><input type="checkbox" value="coindesk" name="option[]">Coindesk</label>
               </div>
                <div class="checkbox">
                   <label><input type="checkbox" value="coinbase" name="option[]">CoinBase</label>
              </div>
               <div class="checkbox">
                  <label><input type="checkbox" value="zebpay" name="option[]">Zebpay</label>
               </div>
            </div>
        </div>

        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <button type="submit" class="btn btn-success" style="margin-left:38px">Submit</button>
          </div>
        </div>
      </form>
    </div>
  </body>
</html>

برای یادگیری بیشتر میتوانید دوره های ویدیویی آنلاین HTML را مشاهده نمایید.

مرحله‌ی پنجم: یک کنترلر (controller) و rout برای نمایش فرم بسازید.

دستور زیر را در ترمینال وارد کنید.

php artisan make:controller FormController –resource

با انجام این کار، یک فایل کنترلر به نام FormController.php ساخته می‌شود که تمام توابع CRUD که در این مثال نیاز دارید را دارد.

در این قسمت، از پارامتر resource استفاده کرده‌ایم، بنابراین به صورت پیشفرض، چند الگوی مسیریابی در اختیار ما قرار می‌دهد. اما تا زمانی که یک مسیر (rout) را در routes >> web.php file رجیستر نکنیم قابل مشاهده نخواهند بود. پس این کار را انجام می‌دهیم.

// web.phpRoute::resource('forms','FormController');

دستور زیر را در ترمینال وارد کنید.

php artisan route:list

در مرحله‌ی بعد به فایل FormController.php رفته و به تابع create() چند کد اضافه می‌کنیم.

// FormController.php

  /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('forms.create');
    }

سپس، باید یک سرور Development را استارت کنیم. بنابراین در ترمینال، دستور زیر را وارد کنید.

php artisan serve

به مرورگر رفته و این لینک را وارد کنید:

پیشنهاد فرانش به شما
تفاوت Angular و React

http://localhost:8000/products/create

صفحه‌ی زیر را خواهید دید

ساخت فرم در لاراول

 

دوره های مرتبط در فرانش

 

مرحله‌ی ششم: اعتبارسنجی (Validation) لاراول ۵ را در فرم قرار دهید.

اکنون باید یک action به فرم ایجاد coin وارد کنیم.

<!-- create.blade.php -->

<form method="post" action="{{url('forms')}}">

اکنون، باید به مسئله‌ی CSRF Token رسیدگی کنیم. برای برطرف کردن این مشکل، کد زیر را به فرم اضافه کنید تا خطای expiry page exception از بین برود.

<!-- create.blade.php -->

{{csrf_field()}}

اگر مسیرهای resource را می‌بینید، بنابراین در فایل FormController.php، post request را دارید که آن هم مسیر /forms و تابع store را دارد. تابع function() را برای ذخیره‌ی داده در دیتابیس کدنویسی کنید.

نکته‌ای که باید به خاطر داشته باشید این است که باید مدل namespace متعلق به Form.php را در فایل FormController.php فراخوانی کنیم. بنابراین سطر زیر را به ابتدای فایل FormController.php  اضافه کنید.

use App\Form;

همچنین باید اعتبارسنجی را در اینجا قرار دهیم.

// FormController.php

public function store(Request $request)
    {
        //
         $request->validate([
          'coinname' => 'required',
          'coinprice'=> 'required|numeric',
        ]); 
        
        $form= new Form();
        $form->coinname=$request->get('coinname');
        $form->coinprice=$request->get('coinprice');
        $checkbox = implode(",", $request->get('option'));
        $form->dropdown=$request->get('dropdown');
        $form->radio=$request->get('radio');
        $form->checkbox = $checkbox; 
        $form->save();
        return redirect('forms')->with('success', 'Coin has been added');
    }

اگر اعتبارسنجی شکست بخورد، باید خطایی نمایش داده شود. بنابراین به create.blade.php برگشته و کد زیر را بعد از تگ h2 وارد کنید.

<!-- create.blade.php -->

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Laravel 5 CRUD Tutorial With Example From Scratch </title>
    <link rel="stylesheet" href="{{asset('css/app.css')}}">
  </head>
  <body>
    <div class="container">
      <h2>Create A Form</h2><br  />
     @if ($errors->any())
      <div class="alert alert-danger">
          <ul>
              @foreach ($errors->all() as $error)
                  <li>{{ $error }}</li>
              @endforeach
          </ul>
      </div><br />
      @endif
      @if (\Session::has('success'))
      <div class="alert alert-success">
          <p>{{ \Session::get('success') }}</p>
      </div><br />
      @endif
      <form method="post" action="{{url('forms')}}">
        {{csrf_field()}}
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <label for="CoinName">CoinName:</label>
            <input type="text" class="form-control" name="coinname">
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4">
              <label for="CoinPrice">CoinPrice:</label>
              <input type="text" class="form-control" name="coinprice">
            </div>
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4" style="margin-left:38px">

                 <lable>Keep</lable>
                   <input type="radio" name="radio" value="keep">
                 <lable>Port</lable>
                     <input type="radio" name="radio" value="port">
            </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4" style="margin-left:38px">
                <lable>Level</lable>
                <select name="dropdown">
                  <option value="beginner">Beginner</option>
                  <option value="intermediate">Intermediate</option>
                  <option value="advance">Advance</option>  
                </select>
            </div>
        </div>
         <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4" style="margin-left:38px">

               <lable>Exchanges :</lable>
               <div class="checkbox">
                  <label><input type="checkbox" value="coindesk" name="option[]">Coindesk</label>
               </div>
                <div class="checkbox">
                   <label><input type="checkbox" value="coinbase" name="option[]">CoinBase</label>
              </div>
               <div class="checkbox">
                  <label><input type="checkbox" value="zebpay" name="option[]">Zebpay</label>
               </div>
            </div>
        </div>

        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <button type="submit" class="btn btn-success" style="margin-left:38px">Submit</button>
          </div>
        </div>
      </form>
    </div>
  </body>
</html>

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

پیشنهاد فرانش به شما
بهترین زبان‌‌ های برنامه نویسی در 2019: 10 زبان برتر برای یادگیری

http://localhost:8000

اگر فرم را بدون وارد کردن مقدار سابمیت کنید، خطاهایی مانند آنچه در تصویر نشان داده شده را خواهید دید.

اعتبارسنجی فرم Laravel

 

آموزش ویدیویی مقدماتی رایگان لاراول Laravel 

مرحله‌ی هفتم: یک صفحه‌ی index برای فهرست کردن coinها بسازید.

برای واکشی (fetch) داده‌ها از دیتابیس، باید دیتابیس را جستجو کرده و مجموعه (collection) را واکشی کنیم و سپس آن مجموعه را از فایل index.blade.php بگذرانیم. پس، باید در فایل FormController.php کدی بنویسیم تا داده‌ها را از index view آورده و به آن بازگرداند.

// FormController.php

  /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $forms = Form::all()->toArray();
        return view('forms.index', compact('forms'));
    }

در پوشه‌ی resources >> views >> forms، یک فایل جدید به نام index.blade.php بسازید.

<!-- index.blade.php -->

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Index Page</title>
    <link rel="stylesheet" href="{{asset('css/app.css')}}">
  </head>
  <body>
    <div class="container">
    <br />
    @if (\Session::has('success'))
      <div class="alert alert-success">
        <p>{{ \Session::get('success') }}</p>
      </div><br />
     @endif
    <table class="table table-striped">
    <thead>
      <tr>
        <th>ID</th>
        <th>CoinName</th>
        <th>CoinPrice</th>
        <th colspan="2">Action</th>
      </tr>
    </thead>
    <tbody>
      @foreach($forms as $form)
      <tr>
        <td>{{$form['id']}}</td>
        <td>{{$form['coinname']}}</td>
        <td>{{$form['coinprice']}}</td>
        <td><a href="{{action('FormController@edit', $form['id'])}}" class="btn btn-warning">Edit</a></td>
        <td>
          <form action="{{action('FormController@destroy', $form['id'])}}" method="post">
            {{csrf_field()}}
            <input name="_method" type="hidden" value="DELETE">
            <button class="btn btn-danger" type="submit">Delete</button>
          </form>
        </td>
      </tr>
      @endforeach
    </tbody>
  </table>
  </div>
  </body>
</html>

سپس به این لینک بروید:

http://localhost:8000/forms

آموزش CRUD لاراول

 

دوره های مرتبط در فرانش

مرحله‌ی هشتم: یک نمایش ویرایش (edit view) برای آپدیت کردن فرم‌ها ایجاد کنید.

گام بعدی، افزودن تابع edit به فایل FormController.php و وارد کردن کد زیر به آن است.

// FormController.php

  /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $form = Form::find($id);
        return view('forms.edit',compact('form','id'));
    }

اکنون، یک فایل edit.blade.php را درون resources >> views >> forms بسازید.

<!-- edit.blade.php -->
@php
  $values = explode(",", $form->checkbox);
@endphp

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Laravel 5 CRUD Tutorial With Example From Scratch </title>
    <link rel="stylesheet" href="{{asset('css/app.css')}}">
  </head>
  <body>
    <div class="container">
      <h2>Edit A Form</h2><br  />
      @if ($errors->any())
      <div class="alert alert-danger">
          <ul>
              @foreach ($errors->all() as $error)
                  <li>{{ $error }}</li>
              @endforeach
          </ul>
      </div><br />
      @endif
      <form method="post" action="{{action('FormController@update', $id)}}">
        {{csrf_field()}}
        <input name="_method" type="hidden" value="PATCH">
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <label for="name">CoinName:</label>
            <input type="text" class="form-control" name="coinname" value="{{$form->coinname}}">
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4">
              <label for="price">CoinPrice:</label>
              <input type="text" class="form-control" name="coinprice" value="{{$form->coinprice}}">
            </div>
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4" style="margin-left:38px">

                 <lable>Keep</lable>
                   <input type="radio" name="radio" value="keep"  @if($form->radio == 'keep') checked @endif>
                 <lable>Port</lable>
                     <input type="radio" name="radio" value="port"  @if($form->radio == 'port') checked @endif>
            </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4" style="margin-left:38px">
                <lable>Level</lable>
                <select name="dropdown">
                  <option value="beginner"  @if($form->dropdown=="beginner") selected @endif>Beginner</option>
                  <option value="intermediate"  @if($form->dropdown=="intermediate") selected @endif>Intermediate</option>
                  <option value="advance" @if($form->dropdown=="advance") selected @endif>Advance</option>  
                </select>
            </div>
        </div>
         <div class="row">
          <div class="col-md-4"></div>
            <div class="form-group col-md-4" style="margin-left:38px">

               <lable>Exchanges :</lable>
               <div class="checkbox">
                  <label><input type="checkbox" value="coindesk" name="option[]" @if(in_array("coindesk", $values)) checked @endif>Coindesk</label>
               </div>
                <div class="checkbox">
                   <label><input type="checkbox" value="coinbase" name="option[]"  @if(in_array("coinbase", $values)) checked @endif>CoinBase</label>
              </div>
               <div class="checkbox">
                  <label><input type="checkbox" value="zebpay" name="option[]" @if(in_array("zebpay", $values)) checked @endif>Zebpay</label>
               </div>
            </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <button type="submit" class="btn btn-success" style="margin-left:38px">Update</button>
          </div>
        </div>
      </form>
    </div>
  </body>
</html>

در مرحله‌ی بعد، تابع update را کدنویسی کنید تا مقادیر در دیتابیس آپدیت شوند.

// ProductController.php

  /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    $request->validate([
          'coinname' => 'required',
          'coinprice'=> 'required|numeric',
        ]); 
        $form = Form::find($id);
        $form->coinname=$request->get('coinname');
        $form->coinprice=$request->get('coinprice');
        $checkbox = implode(",", $request->get('option'));
        $form->dropdown=$request->get('dropdown');
        $form->radio=$request->get('radio');
        $form->checkbox = $checkbox; 
        $form->save();
        return redirect('forms');

در نهایت، به پایان مثال آموزش لاراول از سطح مقدماتی رسیده‌ایم.

پیشنهاد فرانش به شما
توسعه‌دهندگان چه می‌کنند و چقدر درآمد دارند؟ | Stack Overflow

ویدیو آموزش مقدماتی لاراول Laravel

در صورتی‌که این راهنمای مقدماتی Laravel برای شما مفید بود:

برای یادگیری کامل می‌توانید دوره های ویدیویی آنلاین آموزش لاراول را مشاهده نمایید.