درس 8 - Controller ها در لاراول
آموزش فارسی و رایگان لاراول

آموزش ساخت و استفاده از کنترلرها در فریمورک لاراول 

در فریمورک هایی که بر مبنای MVC پیاده سازی شده اند حرف  C به Controller اشاره میکند. در فریمورک لاراول کنترلرها بین View ها و Model ها نقش بازی میکند. در این درس به Controller ها در فریمورک Laravel خواهیم پرداخت.

 

آموزش ساخت Controller در فریمورک لاراول

برای ساخت کنترلر جدید در فریمورک لاراول برای وارد کردن دستورات یک Terminal یا command promp بنا به سیستم عامل خود باز کنید و دستور زیر را وارد کنید.

php artisan make:controller <controller-name> --plain

در قطعه کد بالا <controller-name> را با نام کنترلر مورد نیاز خود در لاراول جایگزین کنید.

دستور بالا یک عدد constructor پایه ای نیز بصورت خودکار میسازد چون در پایان دستور ما --plain را قرار دادیم و اگر نیازی به constructor  ندارید به راحتی میتوانید این دستور را در پایان وارد نکنید.

کنترلر جدید لاراول در مسیر app/Http/Controllers موجود و قابل مشاهده است.

اگر فایل کنترلر جدید را باز کنید مشاهده میکنید که کمی کد بصورت خودکار برای شما نوشته شده است و شما میتوانید آنها را تغییر دهید.

کنترلر جدید ساخته شده توسط route ها قابل دسترسی است که نمونه کد در زیر امده است.

Route::get(‘base URI’,’controller@method’);

مثال

قدم اول - ما قصد داریم یک کنترلر جدید به نام UserController بسازیم پس باید دستور زیر را در ترمینال اجرا کنیم.

php artisan make:controller UserController --plain

قدم دوم - بعد از اجرای دستور بالا باید نتیجه در ترمینال مشابه تصویر زیر باشد.

آموزش ساخت کنترلرها در فریمورک لاراول

قدم سوم - کنترلر ساخته شده در مسیر app/Http/Controller/UserController.php قرار دارد که اگر باز کنید کمی کد آماده درونش ساخته شده است و شما میتوانید کدهایی مورد نیاز خود را به این کنترلر جدید اضافه کنید.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class UserController extends Controller {
   //
}

 

Controller Middleware در فریمورک لاراول

ما قبلا در مورد Middleware ها در لاراول و همینطور middleware ها در controller ها صحبت کردیم و یک درس کاملی ارائه دادیم.

Middleware همچنین میتوانند به route یک controller و constructor مربوط به کنترلر متصل شوند.

شما میتوانید متود middleware را به مقدار middleware کنترلر اختصاص دهید.

یک middleware رجیستر شده میتواند محدود یه یک متود کنترلر باشد.

 

اتصال Middleware به route در لاراول

Route::get('profile', [
   'middleware' => 'auth',
   'uses' => 'UserController@showProfile'
]);

در نمونه کد بالا مشاهده میکنید که ما یک middleware به نام auth را به مسیر یا route مربوط به profile از کنترلر UserController اختصاص داده ایم.

 

اتصال Middleware به constructor مربوط به Controller در لاراول

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class UserController extends Controller {
   public function __construct() {
      $this->middleware('auth');
   }
}

در مثال بالا مشاهده میکنید که ما Middleware با نام auth را به متود constructor کنترلر UserController اختصاص داده ایم.

مثال 

 

قدم اول - کد های زیر را به routes لاراول خود اضافه کنید و ذخیره کنید.

<?php
Route::get('/usercontroller/path',[
   'middleware' => 'First',
   'uses' => 'UserController@showPath'
]);

 

قدم دوم - یک middleware جدید بسازید و نام آنرا FirstMiddleware انتخاب کنید . این کار را دستور زیر در ترمینال انجام میدهد.

php artisan make:middleware FirstMiddleware

 

قدم سوم - کدهای زیر را به متود handle مربوط به FirstMiddleware که تازه ایجاد کردیم و در مسیر app/Http/Middleware قرار داد کپی کنید.

<?php

namespace App\Http\Middleware;
use Closure;

class FirstMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>First Middleware';
      return $next($request);
   }
}

 

قدم چهارم - یک middleware جدید به نام SecondMiddleware بسازید. از طریق اجرای دستور زیر میتوانید این کار را انجام دهید.

php artisan make:middleware SecondMiddleware

 

قدم پنجم - فایل جدید middleware که ایجاد کردید را باز کنید. این فایل در مسیر app/Http/Middleware قرار دارد و کد زیر را در متود handle آن کپی کنید.

<?php

namespace App\Http\Middleware;
use Closure;

class SecondMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>Second Middleware';
      return $next($request);
   }
}

 

قدم ششم - یک کنترلر جدید به نام UserController توسط دستور زیر بسازید.

php artisan make:controller UserController --plain

 

قدم هفتم - بعد از اجرای کد بالا نتیجه در ترمینال شما باید مشابه تصویر زیر باشد.

آموزش ساخت کنترلر در فریمورک لاراول

قدم هشتم - کدهای زیر را در مسیر app/Http/UserController.php که کنترلر لاراول شما میباشد کپی کنید.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class UserController extends Controller {
   public function __construct() {
      $this->middleware('Second');
   }
   public function showPath(Request $request) {
      $uri = $request->path();
      echo '<br>URI: '.$uri;
      
      $url = $request->url();
      echo '<br>';
      
      echo 'URL: '.$url;
      $method = $request->method();
      echo '<br>';
      
      echo 'Method: '.$method;
   }
}

 

قدم نهم - حالا با دستور زیر وب سرور درونی php و لاراول را اجرا کنید

php artisan serve

 

قدم دهم - مرورگر خود را باز کنید و از آدرس url زیر بازدید کنید.

http://localhost:8000/usercontroller/path

 

قدم یازدهم - نتیجه ی مشاهده شده در مرورگر باید به شکل تصویر زیر باشد.

آموزش ساخت کنترلر در فریمورک لاراول

 

کنترلر Restful Resource در لاراول

در اغلب اپلیکیشن های لاراولی ما نیاز به عملیات CRUD یا CREATE - READ - UPDATE - DELETE داریم. فریمورک لاراول این کار رابرای ما آسان کرده است. 

کافیه فقط یک کنترلر جدید در لاراول بسازید و لاراول به شما کمک خواهد کرد تا عملیات CRUD را به سادگی هر چه تمام تر انجام دهید.

همچنین برای تمامی این عملیات ها نیز میتوانید یک route واحد تعریف کنید.

مثال :‌

قدم 1 - در لاراول خود یک کنترلر جدید به نام MyController بسازید. این کار را توسط دستور زیر در ترمینال میتوانید بسازید.

php artisan make:controller MyController

 

قدم 2 - کدهای زیر را به فایل app/Http/Controllers/MyController.php اضافه کنید.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class MyController extends Controller {
   public function index() {
      echo 'index';
   }
   public function create() {
      echo 'create';
   }
   public function store(Request $request) {
      echo 'store';
   }
   public function show($id) {
      echo 'show';
   }
   public function edit($id) {
      echo 'edit';
   }
   public function update(Request $request, $id) {
      echo 'update';
   }
   public function destroy($id) {
      echo 'destroy';
   }
}

 

قدم 3 - کدهای زیر را فایل routes لاراول خودتان اضافه کنید.

Route::resource('my','MyController');

 

قدم 4 - خب همانطور که مشاهده کردید ما تمامی متود ها را در کنترلر MyController با استفاده از ایجاد یک کنترلر از نوع resource ایجاد کردیم.

در جدول زیر route های ساخته شده و اکشن و مسیر انها و همچنین نوع ارسال مشخص شده است.

verb path action route name
GET /my index my.index
GET /my/create create my.create
POST /my store my.store
GET /my/{my} show my.show
GET /my/{my}/edit edit my.edit
PUT/PATCH /my/{my} update my.update
DELETE /my/{my} destroy my.destroy

 

قدم 5 - سعی کنید URL های زیر را اجرا کنید و نتیجه را ببینید.

آدرس url توضیحات  
http://localhost:8000/my Executes index method of MyController.php index
http://localhost:8000/my/create Executes create method of MyController.php create
http://localhost:8000/my/1 Executes show method of MyController.php show
http://localhost:8000/my/1/edit Executes edit method of MyController.php edit

 

کنترلرهای Implicit در فریمورک لاراول

کنترلرهای نوع Implicit در لاراول به شما کمک میکند تا توسط یک route بتوانید تمامی اکشن های مورد نیاز را کنترل کنید.

این route ها همانند route های عادی فریمورک لاراول تعریف میشوند و باید درون فایل route ها به شکل  Route:controller نوشته شود. به مثال زیر دقت کنید.

Route::controller(‘base URI’,’<class-name-of-the-controller>’);

در کد بالا <class-name-of-the-controller> را با نام کنترلر مورد نظر که ساخته اید تغییر دهید.

نام متود کنترلر باید با لغت HTTP استارت شود همانند get یا post که اگر آنرا با get استارت کنید به درخواست های GET رسیدگی میکند و اگر با post استارت کنید به درخواست های POST رسیدگی میکند.

بعد از HTTP شما میتوانید هر نامی را انتخاب کنید اما باید از قواعد URL پیروی کند.

مثال 

قدم 1 - دستور زیر را اجرا کنید تا یک کنترلر جدید ساخته شود نام کنترلر ImplicitController هست. میتوانید هر نامی برای کلاس در نظر بگیرید.

php artisan make:controller ImplicitController --plain

قدم 2 - اگر قدم 1 را به درستی انجام داده باشید باید نتیجه در ترمینال یا کامند پرومپ به شکل زیر باشد.

 

آموزش ساخت کنترلر implicit در فریمورک لاراول

 

قدم 3 - کد زیر را در مسیر app/Http/Controllers/ImplicitController.php کپی کنید.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class ImplicitController extends Controller {
   /**
      * Responds to requests to GET /test
   */
   public function getIndex() {
      echo 'index method';
   }
   
   /**
      * Responds to requests to GET /test/show/1
   */
   public function getShow($id) {
      echo 'show method';
   }
   
   /**
      * Responds to requests to GET /test/admin-profile
   */
   public function getAdminProfile() {
      echo 'admin profile method';
   }
   
   /**
      * Responds to requests to POST /test/profile
   */
   public function postProfile() {
      echo 'profile method';
   }
}

 

قدم 4 - کد زیر را به فایل route های لاراول خود اضافه کنید.

Route::controller('test','ImplicitController');

 

تزریق به متود سازنده یا constructor کنترلرهای فریمورک لاراول

ابزار Laravel service container برای مدیریت کنترلرهای فریمورک لاراول استفاده میشود. همانطور که میدانید هر کنترلر برای استفاده از یک وابستگی باید انرا در constructor یا متود سازنده ی خود فراخوانی و پیاده سازی کند.

تمامی پیش نیاز ها و وابستگی ها بصورت خودکار به متود سازنده ی یک کنترلر در لاراول تزریق و بعدا استفاده خواهند شد.

مثال

قدم 1 - کد های زیر را به فایل route های فریمورک لاراول خود اضافه کنید.

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

 

قدم 2 - کدهای زیر را به مسیر app/Http/Controllers/ImplicitController.php فریمورک لاراول اضافه کنید.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class ImplicitController extends Controller {
   private $myclass;
   
   public function __construct(\MyClass $myclass) {
      $this->myclass = $myclass;
   }
   public function index() {
      dd($this->myclass);
   }
}

 

قدم 3 - به آدرس url زیر مراجعه کنید تا نتیجه ی استفاده از تزریق constructor  یا متود سازنده را ببینید.

http://localhost:8000/myclass

 

قدم 4 - نتیجه ی مشاهده شده باید به شکل زیر باشد.

دوره ی آموزش فریمورک لاراول تزریق سازنده به کنترلر ها

 

تزریق به متود سازنده یا constructor کنترلرهای فریمورک لاراول

در فریمورک لاراول ممکن است شما بعنوان توسعه ی لاراول ، قصد داشته باشید وابستگی های مورد نیاز خود را به متود اکشن های مختلف فریمورک لاراول تزریق کنید.

در مثال بعدی این مورد را آموزش خواهیم داد.

مثال

قدم 1 - کدهای زیر را به فایل route های خود اضافه کنید.

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

 

قدم 2 - کدهای زیر را به مسیر و فایل app/Http/Controllers/ImplicitController.php لاراول خود اضافه کنید.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class ImplicitController extends Controller {
   public function index(\MyClass $myclass) {
      dd($myclass);
   }
} 

قدم 3 - به مسیر url زیر بروید و نتیجه را مشاهده کنید.

http://localhost:8000/myclass

نتیجه باید مشابه تصویر زیر باشد.

آموزش فریمورک لاراول

اتمام درس.