آموزش برنامه نویسی با Laravel | آموزش کامل و جامع نرم افزار ها و زبان های برنامه نویسی

  • ۱۵:۵۴


نوشتن یک برنامه ی سطح متوسط لیست نمایش کارها و وظایف با Laravel

فهرست محتوا

1. مقدمه

2. نصب

3. آماده سازی پایگاه داده

·        Migration پایگاه داده

·        مدل های Eloquent

·        رابطه های Eloquent (مدیریت رابطه بین جداول به وسیله ی Eloquent)

4. Routing (آدرس دهی)

·        بازیابی و نمایش یک view

·        Authentication (احراز هویت کاربر)

·        کنترلر Task

5. ساخت Layout و View برنامه

·        ایجاد Layout

·        ایجاد یک View فرزند

6. اضافه کردن Task های جدید به لیست

·        Validation (اعتبارسنجی)

·        ایجاد Task

7. نمایش Task های جاری

·        Dependency Injection

·        نمایش دادن Task ها

8.  حذف کردن Task های جاری

·        اضافه کردن دکمه ی Delete به برنامه

·        Route Model Binding (bind کردن مدل)

·        Authorization (مجوزدهی)

·        حذف کردن Task از لیست

مقدمه

در این آموزش نحوه ی نوشتن برنامه ی سطح متوسط به وسیله ی چارچوب نرم افزاری Laravel را به شما آموخته و نیز توضیحاتی درباره ی مباحث مطرحی همچون migration، ابزار Eloquent، Routing (مسیردهی)، authentication (احرازهویت)، authorization (مجوزدهی)، dependency injection، validation (اعتبارسنجی)، view ها و قالب های Blade برای شما ارائه می دهیم. در صورتی که از قبل با لاراول کار کرده یا به طور کلی با فریم ورک های PHP آشنایی دارید، این آموزش در مسیر برنامه نویسی در این چارچوب کاری کمک شایانی به شما خواهد کرد.

برای نوشتن برنامه ی سطح متوسط نمایش لیست وظایف از تمامی ابزار و امکانات ذکر شده ی لاراول بهره می گیریم. برنامه ای که در این آموزش به نوشتن آن می پردازیم علاوه بر نمایش و حذف وظایف در لیست، به کاربران اجاز می دهد حساب کاربری ایجاد کرده و عملیات احراز هویت انجام دهند. کد کامل این پروژه در GitHub برای دانلود در دسترس می باشد. 

نصب

ابتدا باید یک نسخه ی جدید از Laravel را نصب نمایید. برای اجرای این framework می توانید از ماشین مجازی Homestead یا یک محیط توسعه محلی PHP به انتخاب خود استفاده کنید. پس از نصب و راه اندازی محیط توسعه محلی، می توانید چارچوب نرم افزاری لاراول را به وسیله ی Composer نصب کنید:

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

می توانید کد برنامه را دانلود کرده و آن را بر روی ماشین محلی خود اجرا کنید. برای این منظور کافی است مخزن (repository) Git آن را کلون کرده و dependency های آن را نصب کنید:

git clone https://github.com/laravel/quickstart-intermediate quickstart

cd quickstart

composer install

php artisan migrate

آماده سازی پایگاه داده

Migration پایگاه داده

در گام نخست با استفاده از یک migration جدولی در پایگاه داده تعریف می کنیم که تمامی task ها در آن ذخیره می شوند. قابلیت migration در لاراول روشی آسان و بهینه برای تعریف ساختار جدول و اعمال تغییرات به آن با استفاده از کدهای بهینه و کارآمد PHP فراهم می آورد. با migration دیگر نیازی نیست که برنامه نویسان تیم ستون های مورد نظر را دستی به نسخه ی محلی خود از پایگاه داده اضافه کنند، بلکه کافی است migration هایی را که مدیر پروژه در source control (سیستم کنترل تغییرات) قرار می دهد، اجرا کنند.

جدول users

همان طور که گفته شد در این برنامه کاربران می توانند حساب کاربری ایجاد کنند. بنابراین برای ذخیره ی اطلاعات مربوط به هر کاربر بایستی یک جدول به نام users در پایگاه داده ایجاد کنیم. خوشبختانه لاراول با migration ای که در اختیار ما قرار می دهد این امکان را فراهم می آورد تا یک جدول ساده ی users، بدون زحمت انجام آن به صورت دستی، ایجاد کنیم. migration پیش فرضی که برای ایجاد جدول نام برده از آن استفاده می شود، در پوشه یdatabase/migrations قرار دارد.     

جدول tasks    

اکنون جدول دیگری به نام tasks در دیتابیس ایجاد می کنیم که اطلاعات task ها در آن نگه داری می شوند. برای آسان تر کردن و سرعت بخشیدن به فرایند کدنویسی در حین ساخت پروژه، می توانید از Artisan CLI استفاده کنید که کلاس های مورد نیاز را برای شما ایجاد کرده و همان طور که گفته شد پروسه ی کدنویسی را تسهیل می بخشد. با استفاده از دستور make:migration یک migration برای جدول tasks ایجاد می کنیم:

php artisan make:migration create_tasks_table --create=tasks

migration ایجاد شده در پوشه ی database/migrations پروژه ی شما جایگذاری می شود. همان طور که می بینید، دستور مذکور یک ID خود افزاینده (auto-incrementing) به همراه Timestamp (برای مشخص کردن ترتیب اجرا) به فایل migration اضافه می کند. ابتدا به ویرایش این فایل و افزودن یک ستون از نوع string برای ذخیره ی اسم task و نیز یک ستون به نام user id که دو جدول tasks و users را به هم متصل می کند (رابطه ی بین این دو ایجاد می کند)، می پردازیم. 

<?php

 

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Database\Migrations\Migration;

 

class CreateTasksTable extends Migration

{

   /**

    * Run the migrations.

    *

    * @return void

    */

   public function up()

   {

       Schema::create('tasks', function (Blueprint $table) {

           $table->increments('id');

           $table->integer('user_id')->index();

           $table->string('name');

           $table->timestamps();

       });

   }

 

   /**

    * Reverse the migrations.

    *

    * @return void

    */

   public function down()

   {

       Schema::drop('tasks');

   }

}

برای اجرای migration ها، از دستور آرتیزان migrate کمک می گیریم. در صورتی که محیط توسعه ی مورد استفاده ی شما Homestead باشد، لازم است این دستور را از درون ماشین مجازی صدا بزنید. دلیل انجام این کار، عدم داشتن دسترسی مسقیم ماشین میزبان به پایگاه داده می باشد.

php artisan migrate

این دستورجداول پایگاه داده را ایجاد می کند. اگر از طریقdatabase client  دلخواه خود برای مشاهده و بررسی جداول استفاده کنید، در آن صورت جداول تازه ایجاد شده ی tasks و users را مشاهده خواهید کرد که دربردارنده ی ستون های تعریف شده در migration هستند. در زیر به ایجاد مدل های Eloquent اپلیکیشن خود خواهیم پرداخت.

مدل های Eloquent

Eloquent ابزار ORM پیش فرض Laravel می باشد. ORM ذکر شده فرآیند ذخیره اطلاعات در پایگاه داده و واکشی آن ها را به وسیله ی مدل های کارآمد فراهم آورده که متعاقبا تعامل با پایگاه داده آسان تر می کند. هر مدل مسقیما با یک جدول در پایگاه داده متناظر می باشد. 

مدل User

ابتدا می بایست یک مدل ایجاد کنیم که به جدول users در پایگاه داده منطبق باشد (تعلق داشته باشد). اگر در پوشه ی app پروژه ی خود پیمایش کنید، می بینید که لاراول یک مدل پیش فرض به نام User برای استفاده ی شما در نظر گرفته است، از اینرو نیازی نیست خود یک مدل به صورت دستی ایجاد کنید.

مدل Task

حال یک مدل به نام Task ایجاد می کنیم که با جدول tasks در پایگاه داده منطبق می باشد. این بار نیز می توان با بهره گیری از یک دستور صریح آرتیزان برای ایجاد مدل اقدام کرد. دستور مورد نیاز برای ایجاد مدل عبارت است از: make:model. این دستور را به صورت زیر فراخوانی می کنیم:

php artisan make:model Task

مدل تازه ایجاد شده داخل پوشه ی app برنامه ی کاربردی شما جای گذاری می شود. به طور پیش فرض، کلاس مدل تهی و فاقد هیچ گونه فیلد و متد می باشد. لزومی ندارد که صریحا به مدل Eloquent اعلان کنیم دقیقا با کدام کلاس متناظر می باشد (تعلق دارد) زیرا خود مدل فرض می گیرد جدول پایگاه داده در واقع همان نسخه ی جمع اسم مدل می باشد. پس نتیجه می گیریم که مدل Task با جدول tasks در پایگاه داده که همان نسخه ی جمع اسم مدل (Task) است، متناظر می باشد.

در اینجا چند آیتم به مدل مزبور اضافه می کنیم. ابتدا در کد ذکر می کنیم که خصیصه ی (attribute) name این مدل بایستی mass-assignable باشد (قابلیت تخصیص کلی).

<?php

 namespace App;

 use Illuminate\Database\Eloquent\Model;

 class Task extends Model

{

   /**

    * The attributes that are mass assignable.

    *

    * @var array

    */

   protected $fillable = ['name'];

}

رابطه های Eloquent (مدیریت رابطه بین جداول به وسیله ی Eloquent)

حالا که مدل های برنامه را ایجاد کردیم، بایستی بین آن ها ارتباط برقرار کنیم. برای مثال مدل User ما می تواند چندین نمونه از مدل Task داشته باشد (رابطه ی یک به چند با tasks داشته باشد)، این در حالی است که یک Task تنها به یک User انتساب داده می شود. تعریف یک ارتباط (relationship) بین مدل ها به ما اجازه می دهد با آسانی هر چه تمام تر در رابطه ی مدل ها به شکل زیر بچرخیم (با حلقه تک تک task های user را نمایش دهیم):

$user = App\User::find(1);

foreach ($user->tasks as $task) {

   echo $task->name;

}

رابطه ی tasks

حال به ایجاد رابطه ی جدول tasks در مدل User می پردازیم. رابط های Eloquent داخل مدل در قالب متدهایی تعریف می شوند. Eloquent از انواع رابطه بین جداول پشتیبانی می کند. برای این مثال، داخل مدل User یک تابع به نام tasks تعریف می کنیم که متد hasMany (از توابع Eloquent) را صدا می زند:   

<?php

 namespace App;

 // Namespace Imports...

 

class User extends Model implements AuthenticatableContract,

                                   AuthorizableContract,

                                   CanResetPasswordContract

{

   use Authenticatable, Authorizable, CanResetPassword;

 

   // Other Eloquent Properties...

    /**

    * Get all of the tasks for the user.

    */

   public function tasks()

   {

       return $this->hasMany(Task::class);

   }

}

تعریف رابطه ی user

در گام بعدی، یک رابطه ی user در مدل Task ایجاد می کنیم. همان طور که گفته شد رابطه ی مورد نظر را بایستی داخل مدل به صورت یک متد تعریف نمود. در این مثال برای نیل به هدف متد belongsTo از توابع Eloquent را بکار می بریم:

<?php

 

namespace App;

 use App\User;

use Illuminate\Database\Eloquent\Model;

 class Task extends Model

{

   /**

    * The attributes that are mass assignable.

    *

    * @var array

    */

   protected $fillable = ['name'];

    /**

    * Get the user that owns the task.

    */

   public function user()

   {

       return $this->belongsTo(User::class);

   }

}

پس از تعریف رابطه ها، می توان نسبت به ایجاد کنترلرهای اپلیکیشن اقدام نمود.

Routing (مسیردهی)

در نسخه ی ساده ی اپلیکیشن لیست نمایش وظایف (که در مبحث پیشین نوشتیم)، تمام منطق برنامه را با استفاده از Closure ها در فایل routes.php پیاده سازی می کردیم. در بیشتر قسمت های این برنامه برای سازماندهی route ها از کنترلر استفاده می کنیم. کنترلرها به ما این امکان را می دهند تا منطق مدیریت درخواست HTTP را برای سازماندهی بهتر در چندین فایل پیاده سازی کنیم. 

بازیابی و نمایش یک View 

در این بخش یک route بیشتر نداریم که از یک Closure استفاده می کند و آن (route)  ' / 'می باشد. این Closure صرفا یک صفحه برای کاربران میهمان اپلیکیشن نمایش می دهد. حال به پر کردن این  routeمی پردازیم. از این route، یک قالب HTML رندر می کنیم (اجرا کرده و نمایش می دهیم) که صفحه ی "welcome" را شامل می شود:  

در فرییم ورک لاراول تمامی قالب های HTML در پوشه ی resources/views نگهداری می شوند. برای بازیابی یکی از این قالب ها از route، تابع کمکی view را بکار می بریم:

Route::get('/', function () {

   return view('welcome');

});

البته هنوز view را ایجاد نکرده ایم. در بخش بعدی به آن خواهیم پرداخت.

Authentication (احراز هویت)

یادآور می شویم که کاربران بایستی در این برنامه بتوانید حساب کاربری ایجاد کرده و به اکانت خود از طریق لاگین دسترسی داشته باشند. ایجاد یک لایه ی کامل authentication برای برنامه ی تحت وب می تواند پروسه ای بسیار ملال آور و کسل کننده باشد. اما از آنجایی که لایه ی احراز هویت یک نیاز اساسی برای تقریبا تمامی برنامه ی های تحت وب محسوب می شود، Laravel سعی می کند این فرآیند را برای برنامه نویس کاملا بی زحمت و آسان سازد.

اولین چیزی که متوجه آن می شوید، وجود کنترلر app/Http/Controllers/Auth/AuthController در اپلیکیشن Laravel می باشد. این کنترلر از یک ویژگی (trait) خاص به نام AuthenticatesAndRegistersUsers که حاوی کل منطق لازم برای ایجاد و احراز هویت کاربران می باشد، بهره می گیرد.  

Route های Authentication

به نظر شما دیگر چه کاری مانده که باید انجام دهیم؟ همان طور که حدس می زنید قالب های ثب نام (registration) و ثبت ورود (login) را هنوز ایجاد نکرده و همچنین route هایی که به کنترلر authentication ارجاع دهند را تعریف نکرده ایم. بنابراین، ابتدا بایستی route های مورد نیاز را به فایل app/Http/routes.php اضافه کنیم:   

// Authentication Routes...

Route::get('auth/login', 'Auth\AuthController@getLogin');

Route::post('auth/login', 'Auth\AuthController@postLogin');

Route::get('auth/logout', 'Auth\AuthController@getLogout');

 

// Registration Routes...

Route::get('auth/register', 'Auth\AuthController@getRegister');

Route::post('auth/register', 'Auth\AuthController@postRegister');

View های Authentication

برای تعریف مکانیزم احراز هویت در برنامه ی تحت وب می بایست فایل های login.blade.php و register.blade.php را در پوشه یresources/views/auth ایجاد کنیم. طراحی و ظاهر (استایل دهی) این view ها اهمیت چندانی ندارد، با این حال وجود تعدادی فیلد ساده در آن ضروری است.

فایل register.blade.php بایستی یک فرم حاوی فیلدهای name، email، password، password_confirmation داشته باشد و یک درخواست POST به روت/auth/register ارسال کند.

 فایل login.blade.php می بایست یک فرم حاوی فیلدهای email و password داشته باشد و نیز یک درخواست POST به روت /auth/login ارسال کند.

کنترلر Task

برای اینکه مقادیر task ها را بازیابی و ذخیره کنیم، لازم است یک کنترلر به نام TaskController با استفاده از Artisan CLI ایجاد کنیم. Artisan CLI کنترلر جدید را در پوشه ی app/Http/Controllers قرار می دهد:

php artisan make:controller TaskController --plain

پس از اینکه کنترلر ایجاد شد، تعدادی route در فایل app/Http/routes.php اضافه (stub) می کنیم که به کنترلر ارجاع می دهند:

Route::get('/tasks', 'TaskController@index');

Route::post('/task', 'TaskController@store');

Route::delete('/task/{task}', 'TaskController@destroy');

احراز هویت تمامی Route های Task

در این برنامه می خواهیم که تمامی task route ها کاربران را برای دسترسی ملزوم به احراز هویت کنند. به عبارتی دیگر کاربر می بایست از طریق لاگین وارد برنامه شود تا بتواند یک task جدید ایجاد کند. از این رو باید دسترسی به task route ها را به کاربرانی که کاملا تصدیق هویت شده اند محدود کنیم. لاراول با بهره گیری از middleware این پروسه را به معنای حقیقی آسان کرده است.

(در کنترلر) برای اینکه کاربران برای انجام تمامی عملیات ملزوم به احراز هویت شوند، می توانیم پارامتر 'auth' را به متد middleware ارسال کرده و سپس متد نام برده را از سازنده (constructor) کنترلر صدا بزنیم. 

<?php

 

namespace App\Http\Controllers;

 use App\Http\Requests;

use Illuminate\Http\Request;

use App\Http\Controllers\Controller;

 class TaskController extends Controller

{

   /**

    * Create a new controller instance.

    *

    * @return void

    */

   public function __construct()

   {

       $this->middleware('auth');

   }

}

ساخت Layout و View برنامه

این برنامه تنها یک ویو دارد که این ویو حاوی یک فرم ویژه ی افزودن task جدید به برنامه و نیز یک لیست برای نمایش task های جاری به کاربر می باشد. برای اینکه بهتر بتوانید ویو را تجسم کنید، در زیر تصویری از نسخه ی تکمیل شده ی برنامه را برای شما نمایش داده ایم:  

آموزش PHP


ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی
مجله اینترنتی سیمرغ شهر اخبار بازیگران بیوگرافی بازیگران اخبارسینمای ایران اخبار سینمای جهان اخبار تلوزیون ایران اخبار تلوزیون جهان اخبار موسیقی ایران اخبار موسیقی جهان


مجله اینترنتی سیمرغ شهر حذف
اخبار روز حذف
اخبارسینما حذف
اخبار موسیقی حذف
اخبارتلویزیون حذف
اخبار فناوری مصالب طنز وسرگرمی حذف
بیو گرافی بازیگران حذف
اخبار داغ سلبریتی های ایرانیx
بیوگرافی بازیگران سینما و تلویزیون ایرانx
فرهنگ وهنر ایران
آخرین مطالب
پربیننده ترین مطالب
مطالب پر بحث تر
نویسندگان
موضوعات
پیوندها
Designed By Erfan Powered by Bayan