معماری mvp در اندروید با کاتلین
معماری mvp در اندروید با کاتلین
1397-12-27
نصب لاراول 5.8 به همراه تنظیمات اولیه
آموزش نصب لاراول 5.8 به همراه تنظیمات اولیه
1398-01-03
آموزش گام به گام عملیات CRUD با لاراول 5.8

آموزش گام به گام عملیات CRUD با لاراول 5.8

عملیات CRUD با لاراول 5.8 ، همانطور که میدانید ایجاد (create) ، خواندن (Read) ، به روز رسانی (Update) و حذف (Delete) یا CRUD چهار توابع اساسی ذخیره سازی پایدار یا مداوم هستند. در این ساعت از تجاری اپ قصد داریم  عملیات CRUD را برای لاراول 5.8 به شما آموزش دهیم. آموزش عملیات CRUD با لاراول 5.8 به صورت ساده و مناسب برای مبتدیان می باشد. با ما همراه باشید.

سرفصل های آموزش عملیات CRUD با لاراول 5.8

مراحل ذکر شده در پایین را دنبال کنید :

  1. نصب لاراول
  2. ویرایش فایل .env – پیکربندی پایگاه داده
  3. مدیریت خطای specified key was too long
  4. ایجاد جدول
  5. ایجاد کنترولر و مدل
  6. ایجاد Resource Route
  7. ایجاد قالب Blade و فایل های آن

گام ۱ : نصب لاراول 5.8

برای شروع باید یک پروژه جدید لاراول را نصب کنیم.قبل از نصب باید مطمئن شوید سرور شما این نیازمندی ها رو داشته باشد:

  • PHP نسخه‌ی 7.1.3 یا بالاتر
  • افزونه‌ ی OpenSSL برروی PHP
  • افزونه‌ ی PDO برروی PHP
  • افزونه‌ ی Mbstring برروی PHP
  • افزونه‌ ی Tokenizer برروی PHP
  • افزونه‌ ی XML برروی PHP
  • افزونه‌ ی Ctype برروی PHP
  • افزونه‌ ی JSON برروی PHP
  • افزونه‌ ی BCMath برروی PHP

به پوشه پروژه خودتون برید (به عنوان مثال ، برای xampp به پوشه htdocs)  و دستور زیر را برای ایجاد یک پروژه در ترمینال خود بنویسید.

composer create-project –prefer-dist laravel/laravel laravelcrud

گام ۲ : ویرایش فایل .env – پیکربندی پایگاه داده

در پروژه لاراول یک فایل با نام .env وجود دارد ، این فایل برای پیکربندی پروژه است. برای اتصال به پایگاه داده ما باید تظیمات لازم پایگاه داده را انجام دهیم.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravelcrud
DB_USERNAME=root
DB_PASSWORD=pasword

گام ۳ : مدیریت خطای specified key was too long

برای مدیریت خطای specified key was too long ، به این فایل بروید: laravelcrud / app / Providers / AppServiceProvider.php و در داخل متد boot مقدار زیر را قرار دهید:

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

گام ۴ : ایجاد جدول

به عنوان مثال برای آموزش عملیات CRUD با لاراول 5.8 من محصولات را در نظر گرفته ام.برای ایجاد جدول محصولات (products) دستور زیر را اجرا کنید.

php artisan make:migration create_products_table –create=products

خروجی ترمینال را در تصویر زیر می بینید:

آموزش گام به گام عملیات CRUD با لاراول 5.8
آموزش گام به گام عملیات CRUD با لاراول 5.8

ما با موفقیت جدول products را ایجاد کردیم. حالا به مسیر “”database/migrations در پروژه لاراول بروید ، در این بخش شما می توانید فایل migration را برای ایجاد جدول products مشاهده کنید.

<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('price');
            $table->text('detail');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('products');
    }
}

اکنون دستور زیر را برای migrate کردن این migrations اجرا کنید:

php artisan migrate

خروجی ترمینال:

آموزش گام به گام عملیات CRUD با لاراول ۵٫۸
آموزش گام به گام عملیات CRUD با لاراول 5.8

گام ۵ : ایجاد کنترولر و مدل

در این مرحله ما یک کنترلر به نام ProductController و یک مدل با نام Product ایجاد خواهیم کرد.دستور زیر را اجرا کنید تا کنترلر و مدل شما ایجاد شوند.

php artisan make:controller ProductController –resource –model=Product

مدل Product  و ProductController ایجاد شدند.فایل app/Product.php را باز کنید و کدهای زیر را در آن بنویسید.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $fillable = [
        'name', 'price', 'detail'
    ];
}

فایل ProductController را به صورتی که در زیر می بینید ویرایش کنید.برای رفتن به این فایل باید مسیر app/Http/Controllers/ProductController.php بروید.در این فایل شما ۷ تابع رو می بینید که باید آن ها را مانند زیر ویرایش کنید

<?php

namespace App\Http\Controllers;

use App\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $products = Product::latest()->paginate(5);
        return view('products.index',compact('products'))
            ->with('i', (request()->input('page', 1) - 1) * 5);

    }

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

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'name'      => 'required',
            'price'     => 'required',
            'detail'    => 'required',
        ]);

        Product::create($request->all());

        return redirect()->route('products.index')
            ->with('success','محصول با موفقیت افزوده شد.');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function show(Product $product)
    {
        return view('products.show',compact('product'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function edit(Product $product)
    {
        return view('products.edit',compact('product'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Product $product)
    {
        $request->validate([
            'name'      => 'required',
            'price'     => 'required',
            'detail'    => 'required',
        ]);

        $product->update($request->all());

        return redirect()->route('products.index')
            ->with('success','محصول با موفقیت بروزرسانی شد.');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function destroy(Product $product)
    {
        $product->delete();

        return redirect()->route('products.index')
            ->with('success','محصول با موفقیت حذف شد!');
    }
}

گام ۶ : ایجاد Resource Route

فایل web.php را در مسیر “routes/web.php” باز کنید و یک resource route برای Product ایجاد کنید.

<?php

Route::get('/', function () {
    return view('welcome');
});

Route::resource('products','ProductController');

گام ۷ : ایجاد قالب Blade و فایل های آن

به دایرکتوری resources/views بروید و یک پوشه به نام products ایجاد کنید بعد وارد این پوشه شوید و ۵ فایلی که در ادامه آورده شده است را ایجاد کنید و کدهای هر کدام را در آن ها بنویسید.

فایل layout.blade.php

<!DOCTYPE html>
<html>
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>آموزش CRUD با لاراول ۵٫۸</title>
    <!-- Bootstrap CSS -->
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
</head>
<body style="direction: rtl;text-align: right;">

<div class="container">

    <div class="text-center" style="margin: 50px 0 50px 0;"><a href="{{url("products")}}"><img
                    src="{{asset("images/logo.png")}}" alt="Logo"></a><br>آموزش CRUD با لاراول ۵٫۸
    </div>

    @yield('content')
</div>

</body>
</html>

فایل index.blade.php

@extends('products.layout')

@section('content')
    <div class="row" style="margin-bottom: 20px;">
        <div class="col-lg-12 margin-tb">
            <div class="pull-right">
                <h3>محصولات</h3>
            </div>
            <div class="pull-left" style="text-align: left;">
                <a class="btn btn-success" href="{{ route('products.create') }}">افزودن محصول</a>
            </div>
        </div>
    </div>

    @if ($message = Session::get('success'))
        <div class="alert alert-success">
            <p>{{ $message }}</p>
        </div>
    @endif

    <table class="table table-bordered">
        <tr>
            <th>شناسه</th>
            <th>نام</th>
            <th>قیمت</th>
            <th>جزئیات</th>
            <th width="280px">عملیات</th>
        </tr>
        @foreach ($products as $product)
            <tr>
                <td>{{ $product->id }}</td>
                <td>{{ $product->name }}</td>
                <td>{{ $product->price }}</td>
                <td>{{ $product->detail }}</td>
                <td>
                    <form action="{{ route('products.destroy',$product->id) }}" method="POST">

                        <a class="btn btn-info" href="{{ route('products.show',$product->id) }}">نمایش</a>

                        <a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">ویرایش</a>

                        @csrf
                        @method('DELETE')

                        <button type="submit" class="btn btn-danger">حذف</button>
                    </form>
                </td>
            </tr>
        @endforeach
    </table>

    {!! $products->links() !!}

@endsection

فایل create.blade.php

@extends('products.layout')

@section('content')
    <div class="row" style="margin-bottom: 20px;">
        <div class="col-lg-12 margin-tb">
            <div class="pull-right">
                <h3>افزودن محصول</h3>
            </div>
        </div>
    </div>

    @if ($errors->any())
        <div class="alert alert-danger">
            <strong>متاسفیم!</strong> در ورودی های شما مشکلاتی وجود داشت!<br><br>
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    <form action="{{ route('products.store') }}" method="POST">
        @csrf

        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>نام:</strong>
                    <input type="text" name="name" class="form-control">
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>قیمت:</strong>
                    <input type="text" name="price" class="form-control">
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>جزئیات:</strong>
                    <textarea class="form-control" style="height:150px" name="detail"></textarea>
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                <button type="submit" class="btn btn-success">محصول</button>
            </div>
        </div>

    </form>
@endsection

فایل edit.blade.php

@extends('products.layout')

@section('content')
    <div class="row" style="margin-bottom: 20px;">
        <div class="col-lg-12 margin-tb">
            <div class="pull-right">
                <h3>ویرایش محصول</h3>
            </div>
        </div>
    </div>

    @if ($errors->any())
        <div class="alert alert-danger">
            <strong>متاسفیم!</strong> در ورودی های شما مشکلاتی وجود داشت!<br><br>
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    <form action="{{ route('products.update',$product->id) }}" method="POST">
        @csrf
        @method('PUT')

        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>نام:</strong>
                    <input type="text" name="name" value="{{ $product->name }}" class="form-control">
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>قیمت:</strong>
                    <input type="text" name="price" value="{{ $product->price }}" class="form-control">
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>جزئیات:</strong>
                    <textarea class="form-control" style="height:150px" name="detail">{{ $product->detail }}</textarea>
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                <button type="submit" class="btn btn-success">بروز رسانی</button>
            </div>
        </div>

    </form>
@endsection

فایل show.blade.php

@extends('products.layout')

@section('content')
    <div class="row" style="margin-bottom: 20px;">
        <div class="col-lg-12 margin-tb">
            <div class="pull-right">
                <h3>نمایش محصول</h3>
            </div>
        </div>
    </div>

    <div class="row">
        <div class="col-xs-12 col-sm-12 col-md-12">
            <div class="form-group">
                <strong>نام:</strong>
                {{ $product->name }}
            </div>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-12">
            <div class="form-group">
                <strong>قیمت:</strong>
                {{ $product->price }}
            </div>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-12">
            <div class="form-group">
                <strong>جزئیات:</strong>
                {{ $product->detail }}
            </div>
        </div>
    </div>
@endsection

برنامه CRUD با لاراول ما آماده است.کافیست برنامه رو با دستور زیر اجرا کنید

php artisan serve

و درانتها آدرس پروژه خود را در مرورگر وارد کرده و پروژه عملیات CRUD با لاراول را مشاهده نمایید.

http://localhost/laravelcrud:8000/products

تصویر زیر صفحه اصلی و نهایی پروژه عملیات CRUD با لاراول می باشد که شما باد آن را در مرورگر خود مشاهده نمایید.

آموزش گام به گام عملیات CRUD با لاراول 5.8
آموزش گام به گام عملیات CRUD با لاراول 5.8

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *