Laravel - Denetleyiciler

MVC çerçevesinde, 'C' harfi Kontrolör anlamına gelir. Görünümler ve Modeller arasında yönlendirici bir trafik görevi görür. Bu bölümde Laravel'deki Denetleyiciler hakkında bilgi edineceksiniz.

Bir Denetleyici Oluşturma

Kullandığınız işletim sistemine bağlı olarak komut istemini veya terminali açın ve Artisan CLI (Komut Satırı Arayüzü) kullanarak denetleyici oluşturmak için aşağıdaki komutu yazın.

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

<Denetleyici-adı> 'nı denetleyicinizin adıyla değiştirin. Bu, biz argümanı geçerken düz bir kurucu yaratacaktır -plain. Düz bir kurucu oluşturmak istemiyorsanız, argümanı göz ardı edebilirsiniz. Oluşturulan kurucu şurada görülebilir:app/Http/Controllers.

Bazı temel kodlamaların sizin için zaten yapıldığını göreceksiniz ve özel kodlamanızı ekleyebilirsiniz. Oluşturulan denetleyici, aşağıdaki sözdizimi ile route.php'den çağrılabilir.

Sözdizimi

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

Misal

Step 1 - Oluşturmak için aşağıdaki komutu yürütün UserController.

php artisan make:controller UserController --plain

Step 2 - Başarılı bir yürütmeden sonra, aşağıdaki çıktıyı alacaksınız.

Step 3 - Oluşturulan denetleyiciyi şurada görebilirsiniz: app/Http/Controller/UserController.php sizin için zaten yazılmış bazı temel kodlamalar ile ihtiyacınıza göre kendi kodlamanızı ekleyebilirsiniz.

<?php

namespace App\Http\Controllers;

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

class UserController extends Controller {
   //
}

Denetleyici Ara Yazılımı

Daha önce ara katman yazılımı görmüştük ve denetleyici ile de kullanılabilir. Ara yazılım ayrıca denetleyicinin yoluna veya denetleyicinizin kurucusu içinde atanabilir. Denetleyiciye ara yazılım atamak için ara yazılım yöntemini kullanabilirsiniz. Kayıtlı ara yazılım, denetleyicinin belirli yöntemiyle de sınırlandırılabilir.

Ara Yazılımları Rotaya Atama

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

Burada UserController'a profil yolunda kimlik doğrulama ara yazılımını atıyoruz.

Denetleyicinin yapıcısı içinde Ara Yazılım atama

<?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');
   }
}

İşte atıyoruz auth ara yazılımda ara yazılım yöntemini kullanan ara yazılım UserController yapıcı.

Misal

Step 1 - Aşağıdaki kod satırlarını app/Http/routes.php dosya ve kaydedin.

routes.php

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

Step 2 - adlı bir ara katman yazılımı oluşturun FirstMiddleware aşağıdaki kod satırını çalıştırarak.

php artisan make:middleware FirstMiddleware

Step 3 - Aşağıdaki kodu handle yeni oluşturulan FirstMiddleware yöntemi app/Http/Middleware.

FirstMiddleware.php

<?php

namespace App\Http\Middleware;
use Closure;

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

Step 4 - adlı bir ara katman yazılımı oluşturun SecondMiddleware aşağıdaki komutu yürüterek.

php artisan make:middleware SecondMiddleware

Step 5 - Yeni oluşturulan SecondMiddleware'in handle yöntemine aşağıdaki kodu ekleyin: app/Http/Middleware.

SecondMiddleware.php

<?php

namespace App\Http\Middleware;
use Closure;

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

Step 6 - adlı bir denetleyici oluşturun UserController aşağıdaki satırı yürüterek.

php artisan make:controller UserController --plain

Step 7 - URL'nin başarılı bir şekilde yürütülmesinden sonra, aşağıdaki çıktıyı alacaksınız -

Step 8 - Aşağıdaki kodu şuraya kopyalayın: app/Http/UserController.php dosya.

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;
   }
}

Step 9 - Şimdi, henüz çalıştırmadıysanız, aşağıdaki komutu çalıştırarak php'nin dahili web sunucusunu başlatın.

php artisan serve

Step 10 - Aşağıdaki URL'yi ziyaret edin.

http://localhost:8000/usercontroller/path

Step 11 - Çıktı aşağıdaki resimde gösterildiği gibi görünecektir.

Dinlendirici Kaynak Denetleyicileri

Genellikle bir başvuru yaparken gerçekleştirmemiz gerekir CRUD (Create, Read, Update, Delete)operasyonlar. Laravel bu işi bizim için kolaylaştırıyor. Sadece bir kontrolör oluşturun ve Laravel CRUD işlemleri için tüm yöntemleri otomatik olarak sağlayacaktır. Ayrıca route.php dosyasındaki tüm yöntemler için tek bir yol da kaydedebilirsiniz.

Misal

Step 1 - adlı bir denetleyici oluşturun MyController aşağıdaki komutu yürüterek.

php artisan make:controller MyController

Step 2 - Aşağıdaki kodu ekleyin

app/Http/Controllers/MyController.php dosya.

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';
   }
}

Step 3 - Aşağıdaki kod satırını ekleyin app/Http/routes.php dosya.

app/Http/routes.php

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

Step 4- Şimdi bir denetleyiciyi kaynakla kaydettirerek MyController'ın tüm yöntemlerini kaydediyoruz. Aşağıda, kaynak denetleyicisi tarafından işlenen eylemlerin tablosu bulunmaktadır.

Fiil Yol Aksiyon Rota Adı
ALMAK /benim indeks my.index
ALMAK / benim / oluştur oluşturmak my.create
İLETİ /benim mağaza benim hikayem
ALMAK /benim benim} göstermek Benim şovum
ALMAK / benim / {benim} / düzenle Düzenle benim düzenlemem
PUT / PATCH /benim benim} Güncelleme my.update
SİL /benim benim} yok etmek benim zararım

Step 5 - Aşağıdaki tabloda gösterilen URL'leri çalıştırmayı deneyin.

URL Açıklama Çıktı Resmi
http: // localhost: 8000 / benim MyController.php'nin indeks yöntemini çalıştırır indeks
http: // localhost: 8000 / benim / oluştur MyController.php metodunu çalıştırır oluşturmak
http: // localhost: 8000 / benim / 1 Yürütme, MyController.php yöntemini gösterir göstermek
http: // localhost: 8000 / benim / 1 / düzenle MyController.php'nin düzenleme yöntemini çalıştırır Düzenle

Örtük Denetleyiciler

Örtülü Denetleyiciler, denetleyicideki her eylemi işlemek için tek bir yol tanımlamanıza izin verir. Bunu route.php dosyasında şu şekilde tanımlayabilirsiniz:Route:controller yöntemi aşağıda gösterildiği gibi.

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

<class-name-of- the-controller>, denetleyicinize verdiğiniz sınıf adıyla değiştirin.

Denetleyicinin yöntem adı, get veya post gibi HTTP fiiliyle başlamalıdır. Bunu get ile başlatırsanız, yalnızca alma isteğini işleyecek ve post ile başlıyorsa, posta isteğini yerine getirecektir. Yapabileceğiniz HTTP fiilinden sonra, yönteme herhangi bir isim verebilirsiniz, ancak URI'nin başlık durum versiyonunu takip etmelidir.

Misal

Step 1- Bir kontrolör oluşturmak için aşağıdaki komutu yürütün. Sınıf adını sakladıkImplicitController. Sınıfa istediğiniz herhangi bir adı verebilirsiniz.

php artisan make:controller ImplicitController --plain

Step 2 - 1. adımı başarıyla uyguladıktan sonra, aşağıdaki çıktıyı alacaksınız -

Step 3 - Aşağıdaki kodu şuraya kopyalayın:

app/Http/Controllers/ImplicitController.php dosya.

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';
   }
}

Step 4 - Aşağıdaki satırı ekleyin app/Http/routes.php dosya istekleri belirtilen denetleyiciye yönlendirmek için.

app/Http/routes.php

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

Yapıcı Enjeksiyon

Laravel servis konteyneri, tüm Laravel kontrolörlerini çözmek için kullanılır. Sonuç olarak, denetleyicinizin yapıcısında ihtiyaç duyabileceği tüm bağımlılıkları yazabilirsiniz. Bağımlılıklar otomatik olarak çözülür ve denetleyici örneğine eklenir.

Misal

Step 1 - Aşağıdaki kodu şuraya ekleyin: app/Http/routes.php dosya.

app/Http/routes.php

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

Step 2 - Aşağıdaki kodu şuraya ekleyin:

app/Http/Controllers/ImplicitController.php dosya.

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);
   }
}

Step 3 - Yapıcı yerleştirmeyi test etmek için aşağıdaki URL'yi ziyaret edin.

http://localhost:8000/myclass

Step 4 - Çıktı aşağıdaki resimde gösterildiği gibi görünecektir.

Yöntem Enjeksiyon

Yapıcı enjeksiyonuna ek olarak, denetleyicinizin eylem yöntemlerine bağımlılıkları da yazabilirsiniz.

Misal

Step 1 - Aşağıdaki kodu şuraya ekleyin: app/Http/routes.php dosya.

app/Http/routes.php

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

Step 2 - Aşağıdaki kodu şuraya ekleyin:

app/Http/Controllers/ImplicitController.php dosya.

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);
   }
}

Step 3 - Yapıcı yerleştirmeyi test etmek için aşağıdaki URL'yi ziyaret edin.

http://localhost:8000/myclass

Aşağıdaki çıktıyı üretecektir -