CakePHP - Denetleyiciler
Denetleyici adından da anlaşılacağı gibi uygulamayı kontrol eder. Modeller ve görünümler arasında bir köprü görevi görür. Denetleyiciler, istek verilerini işler, doğru modellerin çağrıldığından ve doğru yanıtın veya görünümün işlendiğinden emin olur.
Denetleyicilerin sınıfındaki yöntemler çağrılır actions. Her denetleyici adlandırma kurallarını takip eder. Controller sınıfı adları çoğul biçimde, Camel Cased şeklindedir ve Controller'da son bulur -PostsController.
AppController
AppConttrollersınıfı, tüm uygulamaların denetleyicilerinin ana sınıfıdır. Bu sınıf,ControllerCakePHP sınıfı. AppController,src/Controller/AppController.php. Dosya aşağıdaki kodu içerir.
<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Controller\Controller;
class AppController extends Controller {
public function initialize(): void {
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
}
}
AppControlleruygulamanızın her denetleyicisinde kullanılacak bileşenleri yüklemek için kullanılabilir. AppController'da oluşturulan öznitelikler ve yöntemler, onu genişleten tüm denetleyicilerde mevcut olacaktır. initialize() yöntemi, bileşenleri yüklemek için denetleyicinin yapıcısının sonunda çağrılacaktır.
Denetleyici İşlemleri
Denetleyici sınıfındaki yöntemler Eylemler olarak adlandırılır. Bu eylemler, istekte bulunan tarayıcı / kullanıcı için uygun yanıtın gönderilmesinden sorumludur. Görünüm, eylem adıyla, yani denetleyicideki yöntemin adıyla oluşturulur.
Misal
class RecipesController extends AppController {
public function view($id) {
// Action logic goes here.
}
public function share($customerId, $recipeId) {
// Action logic goes here.
}
public function search($query) {
// Action logic goes here.
}
}
Yukarıdaki örnekte görebileceğiniz gibi, RecipesController 3 eylem vardır - View, Paylaş ve Search.
Yönlendiriliyor
Bir kullanıcıyı aynı denetleyicinin başka bir eylemine yönlendirmek için setAction () yöntemini kullanabiliriz. Aşağıda setAction () yönteminin sözdizimi verilmiştir.
Cake\Controller\Controller::setAction($action, $args...)
Aşağıdaki kod, kullanıcıyı aynı denetleyicinin indeks eylemine yönlendirecektir.
$this->setAction('index');
Aşağıdaki örnek, yukarıdaki yöntemin kullanımını göstermektedir.
Misal
Değişiklik yapın config/routes.php dosya aşağıdaki programda gösterildiği gibi.
config/routes.php
<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
// Register scoped middleware for in scopes.
$builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
'httpOnly' => true,
]));
$builder->applyMiddleware('csrf');
$builder->connect('/redirect-controller',['controller'=>'Redirects','action'=>'action1']);
$builder->connect('/redirect-controller2',['controller'=>'Redirects','action'=>'action2']);
$builder->fallbacks();
});
Oluşturmak RedirectsController.phpsrc / Controller / RedirectsController.php dosyasında. Aşağıdaki kodu denetleyici dosyasında kopyalayın.
src/Controller/RedirectsController.php
<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class RedirectsController extends AppController {
public function action1() {
}
public function action2(){
echo "redirecting from action2";
$this->setAction('action1');
}
}
Bir dizin oluşturun Redirects -de src/Template ve bu dizinin altında bir Viewaction1.php adlı dosya. Aşağıdaki kodu o dosyaya kopyalayın.
src/Template/Redirects/action1.php
<h1>This is an example of how to redirect within controller.</h1>
Aşağıdaki URL'yi ziyaret ederek yukarıdaki örneği yürütün.
http: // localhost / cakephp4 / yeniden yönlendirme denetleyicisi
Çıktı
Yürütme üzerine aşağıdaki çıktıyı alacaksınız.
Şimdi, aşağıdaki URL'yi ziyaret edin: http: // localhost / cakephp4 / redirect-controller2
Yukarıdaki URL size aşağıdaki çıktıyı verecektir.
Yükleme Modelleri
CakePHP'de, bir model, loadModel()yöntem. Aşağıdaki sözdizimiloadModel() yöntem -
Cake\Controller\Controller::loadModel(string $modelClass, string $type)
Yukarıdaki işlevin aşağıdaki gibi iki argümanı vardır -
İlk argüman model sınıfının adıdır.
İkinci argüman, yüklenecek havuzun türüdür.
Misal
Makale modelini bir denetleyiciye yüklemek istiyorsanız, denetleyicinin eyleminde aşağıdaki satırı yazarak yüklenebilir.
$this->loadModel('Articles');