Giriş
Tüm isteklerin değerlendirmesini tek bir routes.php
dosyasında yapmak yerine, bu davranışları kontrolcü sınıflar kullanarak düzenlemek isteyebilirsiniz. Kontrolcüler tipik olarak app/Http/Controllers
klasöründe saklanır.
Temel Kontrolcüler
Bu örnekte temel bir kontrolcü sınıf var. Tüm laravel kontrolcüleri varsayılan Laravel yüklemesine dahil olan temel sınıftan genişletilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
namespace App\Http\Controllers; use App\User; use App\Http\Controllers\Controller; class UserController extends Controller { /** * Show the profile for the given user. * * @param int $id * @return Response */ public function showProfile($id) { return view('user.profile', ['user' => User::findOrFail($id)]); } } |
Kontrolcü işlemlerini şu şekilde yönlendirebiliriz.
1 |
Route::get('user/{id}', 'UserController@showProfile'); |
Şimdi, bir istek belirtilen yönlendirme adresi ile eşleştiğinde, UserController
sınıfındaki showProfile
metodu icra edilir. tabiki, bu yönlendirme parametreleri metoda geçirilebilir.
Kontrolcüler & İsim Alanları (Namespace)
Önemli bir not olarak, kontrolcü yönlendirmesi tanımlandığında tam isim alanı belirtmemize ihtiyacımız yoktur. App\Http\Controllers
dan sonra galen sınıf kısmını tanımlamamız yeterli. Varsayılan olarak RouteServiceProvider
, kök kontrolcüsünün ad alanının olduğu bir yönlendirici grubunun içinde routes.php
dosyasını yükleyecektir.
Eğer iç içe veya App\Http\Controllers
klasörünün daha içlerine PHP ad alanları kullanarak organize etmeyi seçtiyseniz, basitçe App\Http\Controllers
kök ad alanına göreceli sınıf isimleri kullanın. Yani kontrolcü sınıfınız App\Http\Controllers\Photos\AdminController
ise şunun gibi bir yönlendirici kaydı yapın:
1 |
Route::get('foo', 'Photos\AdminController@method'); |
Kontrolcü Yönlendirmelerinin İsimlendirilmesi
Kontrolcü yönledirmelerinde isim belirtebilirsiniz.
1 |
Route::get('foo', ['uses' => 'FooController@method', 'as' => 'name']); |
Kontrolcü yönlendirmenize bir isim atadıktan sonra, işlevleri için kolay bir şekilde URL’lerini üretebilirsiniz. Bir kontrolcü işlevine URL üretmek için action
yardımcı metodunu kullanın. App\Http\Controllers
taban isminden sonraki parçayı kullanacağımızı tekrar hatırlatalım.
1 |
$url = action('FooController@method'); |
Ayrıca route
yardımcısını da isim verilmiş kontrolcü için URL üretimi için kullanabilirsiniz.
1 |
$url = route('name'); |
Kontrolcü Ara Katmanı
Ara Katman (middleware) kontrolcünün yönlendirmesine atanabilir:
1 2 3 4 |
Route::get('profile', [ 'middleware' => 'auth', 'uses' => 'UserController@showProfile' ]); |
Ancak, kontrolcünüzün constructor
metodunda belirtilmesi daha kullanışlıdır. Kontrolcü sınıfınızın belirli metodlarından ara katmanı kısıtlayabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class UserController extends Controller { /** * Instantiate a new UserController instance. * * @return void */ public function __construct() { $this->middleware('auth'); $this->middleware('log', ['only' => ['fooAction', 'barAction']]); $this->middleware('subscribed', ['except' => ['fooAction', 'barAction']]); } } |
RESTful Kaynak Kontrolcüleri
Kaynak kontrolcüleri ile sancısız RESTful kontrolcüleri yaparlar. Örneğin, uygulamanızda saklanmış fotoğraflarla ilgili HTTP isteklerini işleyen bir kontrolcü üretmek isteyebilirsiniz. Artisan make:controller
komutunu kullanarak bu şekilde hızlıca bir kontrolcü oluşturabilirsiniz.
1 |
php artisan make:controller PhotoController |
Bu Artisan komutu app/Http/Controllers/PhotoController.php
dosyasını üretecektir. Kontrolcü kullanılabilir her kaynak işlemi için bir metod içerir.
Kaynak yönlendiriciyi kontrolcüye atayabilirsiniz.
1 |
Route::resource('photo', 'PhotoController'); |
Tek bir yönlendirme tanımlaması, fotoğraf kaynağı üzerinde çeşitli RESTful işlemlerinin yapılması için bir çok yönlendirme oluşturur. Aynı şekilde, üretilen kontrolcü zaten gerekli metodlara sahiptir.
Kaynak Kontrolcü Tarafından Eylemlerin İşlenmesi
Verb | Path | Action | Route Name |
---|---|---|---|
GET | photo |
index | photo.index |
GET | /photo/create |
create | photo.create |
POST | photo |
store | photo.store |
GET | /photo/{photo} |
show | photo.show |
GET | /photo/{photo}/edit |
edit | photo.edit |
PUT/PATCH | /photo/{photo} |
update | photo.update |
DELETE | /photo/{photo} |
destroy | photo.destroy |
Kısmi Kaynak Yönlendirmeleri
Bir kaynak yönelendirmesini tanımladığınızda, eylemlerin alt kümesini yönlendirme üzerinde tanımlayabilirsiniz.
1 2 3 4 5 |
Route::resource('photo', 'PhotoController', ['only' => ['index', 'show']]); Route::resource('photo', 'PhotoController', ['except' => ['create', 'store', 'update', 'destroy']]); |
Kaynak Yönlendirmelerinin İsimlendirilmesi
Varsayılan olarak yüm kaynak kontrolcüleri bir yönlendirme ismine sahiptir; ancak, ayarlarınız için names
dizisi geçirilerek bu isimler değiştirilebilir.
1 2 |
Route::resource('photo', 'PhotoController', ['names' => ['create' => 'photo.build']]); |
İç İçe Kaynaklar
Bazen iç içe kaynak tanımlamaya ihtiyacınız olabilir. Örneğin, bir fotoğraf kaynağı fotoğrafa iliştirilmiş bir çok yorum içerebilir. İç içine kaynak kontrolcüler için yönlendirici tanımlamalarınızda “nokta” belirteci kullanın.
1 |
Route::resource('photos.comments', 'PhotoCommentController'); |
Bu yönlendirme photos/{photos}/comments/{comments}
şeklinde ulaşılabilecek iç içe kaynak oluşturur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
namespace App\Http\Controllers; use App\Http\Controllers\Controller; class PhotoCommentController extends Controller { /** * Show the specified photo comment. * * @param int $photoId * @param int $commentId * @return Response */ public function show($photoId, $commentId) { // } } |