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 -