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

آموزش cotroller در Laravel لاراول با مثال کاربردی


در فریمورک های مبتنی بر MVC حرف "C" معادل Controller  هست. Controller یک ارتباط مستقیم بین viewها و model ها برقرار می کند. در این آموزش شما را با controller ها در لاراول آشنا می کنیم.

ساخت کنترلر لاراول

برای ساختن controller بر اساس سیستم عاملی که کار می کنید محیط command prompt یا terminal را باز کنید. و دستور artisan زیر را در آنجا تایپ کنید .

php artisan make:controller <controller-name>

به جای <controller-name> اسم دلخواه برای controller خود بگذارید.

Controller ی که با این دستور ساخته می شود حاوی متدهایی بصورت default هست . که ممکن است به آنها نیاز نداشته باشید. تصویر زیر نمونه ای از ساخت controller به روش کد فوق می باشد.

 

اگر بخواهیم  controllerی بسازیم که حاوی این متدهای پیش فرض نباشد از این دستور استفاده می کنیم :

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

به جای <controller-name> اسم دلخواه برای controller خود بگذارید. تصویر زیر ، نمونه ای از ساخت controller به روش فوق می باشد.

 

مثال :

مرحله 1 - دستور آرتیسان زیر را برای ساخت Controller را در command line تایپ می کنیم.

php artisan make:controller UserController --plain

مرحله 2 - بعد از ساخت controller پیامی مبنی بر موفقت آمیز بودن دستور فوق برای شما نمایش داده می شود.

مرحله 3 – اکنون controller مورد نظر شما به آدرس app/Http/Controller/UserController.php  ایجاد شده است. اگر controller را باز کنید، مشاهده می کنید که حاوی کدهای زیر می باشد.

<?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 ها آشنا شده ایم . می توانیم همراه با controller ها از آنها استفاده کنیم. به دو صورت می توانیم از middleware ها برای Controllerها استفاده کنیم.

  • Middleware ها را می توان به مسیرهای controller ها اختصاص داد .
  • یا می توان داخل متد سازنده کنترلر، middleware را تعریف نمود. یا به اکشن خاصی آن را اختصاص داد. یا یک اکشن را از آن middleware محروم کرد. به مثال موید این مطلب است :
class UserController extends Controller
{
    /**
     * Instantiate a new controller instance.
     *
     * @return void
     */

    public function __construct()

    {
        $this->middleware('auth');
        $this->middleware('log')->only('index');
        $this->middleware('subscribed')->except('store');

    }
}

 

اختصاص دادن middleware به یک route

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

اختصاص دادن middleware داخل تابع سازنده 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 مربوط به احراز هویت به کلاس UserController اختصاص داده شده است.

مثال زیر را راجع به نحوه عملکرد middleware ها دنبال می کنیم :

مرحله 1 – کدهای زیر را داخل فایل app/Http/routes.php قرار دهید و Save کنید.

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

مرحله 2 – بوسیله کدهای زیر ، یک middleware به اسم FirstMiddleware  بسازید.

php artisan make:middleware FirstMiddleware

مرحله 3 – وارد مسیر app/Http/Middleware شوید و FirstMiddleware را باز کنید و داخل متد handle کد های متد زیر را قرار دهید.

<?php
 
namespace App\Http\Middleware;
use Closure;
 
class FirstMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>First Middleware';
      return $next($request);
   }
}

مرحله 4 – یک  middleware دیگر به اسم SecondMiddleware  با اجرا کردن کدهای زیر بسازید.

php artisan make:middleware SecondMiddleware

مرحله 5 - وارد مسیر app/Http/Middleware شوید و SecondMiddleware را باز کنید و داخل متد handle  کد های متدhandle  زیر را قرار دهید.

<?php
 
namespace App\Http\Middleware;
use Closure;
 
class SecondMiddleware {
   public function handle($request, Closure $next){
      echo '<br>Second Middleware';
      return $next($request);
   }
}

مرحله 6 – با اجرا کردن کدهای پایین یک controller به اسم UserController بسازید.

php artisan make:controller UserController --plain

مرحله 7 - بعد از ساخت controller پیامی مبنی بر موفقت آمیز بودن دستور فوق برای شما نمایش داده می شود.

مرحله 8 – کد های زیر را در فایل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;
   }
}

مرحله 9 - اگر هنوز وب سرور xampp  یا Wamp را فعال نکردید، می توانید با دستور زیر ، وب سرور داخلی php  را راه اندازی کنید و سایت را آماده اجرا کنید.

php artisan serve

مرحله 10 – لینک زیر را در مرورگر وارد و اجرا می کنیم.

http://localhost:8000/usercontroller/path

مرحله 11 – خروجی در تصویر زیر قابل مشاهده است.

Restful Resource Controllers

اغلب برنامه هایی که ما می نویسیم نیاز به عملیات های (Create, Read, Update, Delete) دارد که به اصطلاح به آنها CRUD گفته می شود. لاراول انجام این کارها را برای ما آسان کرده است. بطوریکه فقط با ساخت یک controller این متدها بطور اتوماتیک برای عملیات های CRUD ساخته می شوند. همچنین شما می توانید برای این متدها تنها یک route درفایل routes.php تعریف کنید.

مثال:

مرحله 1 – با اجرا کردن کدهای زیر یک controller به اسم MyController  می سازیم .

مرحله 2 – در controller ساخته شده در این مسیر 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 – در فایل route پروژه که در این مسیر app/Http/routes.php  قرار دارد کد زیر را قرار می دهیم.

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

 

مرحله 4 – می بینید که با نوشتن کد بالا تنها با نوشتن یک مسیر به جای نوشتن چندین مسیر، تمام مسیرهای CRUD یک کنترلر را ساختیم.

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 Description Output Image
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 Controllers

Implicit در لغت به معنای ضمنی یا تلویحی است. Implicit Controllers به شما اجازه می دهد تا تنها با تعریف یک route ، همه اکشن های یک controller را مدیریت کنید.

شما می توانید آنها را در فایل route.php  بوسیله متد Route:controller()  تعریف کنید. همانطور که در کد زیر بیان شده است :

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

متد ()controller دو آرگومان می پذیرد. آرگومان اول URI پایه هست. آرگومان دوم  <class-name-of-the-controller> است ، درواقع همان نام کلاسی است که به controller تان اختصاص داده اید.

داخل کلاس controller ، برای نامگذاری اکشن متدها ، این نکته گفتنی ست که ، باید بخشِ اولِ نام آنها با متدهای پروتکل HTTP مثل get یا post شروع شده باشند. اگر شما این متدها را با get شروع کنید پاسخگوی درخواست های Get  هستند. واگر این متدها با post شروع شوند پاسخگوی درخواست های post هستند. بخش دوم اکشن متدها ، هر نامی می تواند قرار بگیرد. مانند : ()getIndex() ، postprofile و...

اگربخش دومِ اکشن متد کنترلر ، چند کلمه ای باشد برای اینکه بتوانید در URI به آن دسترسی داشته باشید، کلمات را با "دش-" از یکدیگر جدا کنید.

Route::controller(' users/admin-profile', '<class-name-of-the-controller>');

اکشن متد داخل controller  :

public function getAdminProfile() {}

مثال :

مرحله 1 – دستور زیر را برای ساخت controller اجرا کنید. ما در اینجا نامی که برای contoller انتخاب نمودیم ImplicitController می باشد . شما می توانید هر نام دلخواهی برای controller تان اختصاص دهید.

مرحله 2 – بعد از ساخت controller پیامی مبنی بر موفقت آمیز بودن دستور فوق برای شما نمایش داده می شود.

مرحله 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 – وارد فایل app/Http/routes.php شوید و کد زیر را قرار دهید.

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

تزریق با استفاده از سازنده کلاس (Constructor Injection)

Dependency Injection  یا تزریق وابستگی به فرآیندی گفته می‌شود، که می توانید تمام وابستگی ها را به عنوان type-hint به کلاس controller تان تزریق کنید . دراین روش یک نمونه از کلاس را به عنوان ورودی ، به آرگومان کلاس دیگر ارسال می کنیم. این فرایند ممکن است در متد سازنده اتفاق بیافتد. در این روش زمانی که متد سازنده کلاس اجرا می شود ، ورودی ها به کلاس controller تزریق می شود . به این فرایند Constructor Injection می گویند.

مثال :

مرحله 1 - فایل app/Http/routes.php را باز کنید و کد زیر را در آن قرار بدهید.

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

مرحله 2 – کد زیر را داخل controller ی که از قبل ساخته بودیم و در این مسیر 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 – برای تست  constructor injection ، در مرورگرتان آدرس زیر را اجرا کنید.

http://localhost:8000/myclass

مرحله 4 – خروجی که مشاهده خواهید کرد بدین صورت خواهد بود.

تزریق با استفاده از متد کلاس (Method Injection)

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

مثال :

مرحله 1 - کد زیر را در فایل app/Http/routes.php وارد کنید.

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 – مرورگر تارن را باز کنید و آدرس زیر را در آن وارد کنید.

http://localhost:8000/myclass

مرحله 4 – خروجی را مشاهده کنید.

فصلِ: 28 , تعداد قسمت ها: 253 , سطح: صفر تا صد

این فصل در یک نگاه:

آشنایی با امکانات جدید لاراول ۷…

برخی از سرفصل های این پکیج آموزشی :   لاراول چیست و چرا ما لاراول استفاده میکنیم کامپوزر کارش چیه و نصب اون نصب لاراول آموزش نصب لاراول از طریق اینستالر آموزش نصب لاراول با استفاده ا…
فصلِ: 1 , تعداد قسمت ها: 2 , سطح: متوسط

این فصل در یک نگاه:

بهترین و پر بازده ترین روش تبدیل بازدیدکننده سایت به مشتری تبلیغات هدفمند و برند سازی هوشمندانه با ایمیل می باشد. ایمیل…

  وبینار(سمینار آنلاین) آموزش تکنیک های ایمیل مارکتینگ   اگر تا انتها این متن را مطالعه کنید نظر شما در مورد ایمیل مارکتینگ 180 درجه عوض می شود!! بر هیچکس پوشیده نیست که از سال 1972 که ای…
فصلِ: 4 , تعداد قسمت ها: 368 , سطح: صفر تا صد

این فصل در یک نگاه:

مباحث تکمیلی فریم ورک لاراول…

فصل اول :آموزش مقدماتی فریم ورک لاراول معرفی فریم ورک لاراول و پیشنیازهای انجام کار انجام کانفیگ های اولیه برای نصب و راه اندازی فریم ورک معرفی روش های نصب پروژه لاراولی از طریق سایت گی…
فصلِ: 1 , تعداد قسمت ها: 155 , سطح: صفر تا صد

این فصل در یک نگاه:

مباحث مقدماتی فریم ورک react.js…

توضیحات کلی مجموعه: فصل اول : آشنایی با مباحث مقدماتی فریم ورک react.js نصب و راه اندازی node.js  و کلیه پیش نیازهای لازم نصب فریم ورک react روی لوکال و انجام تست های لازم آغاز آشنایی …

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید