CakePHP - Yönlendirme

Bu bölümde, yönlendirme ile ilgili aşağıdaki konuları öğreneceğiz -

  • Yönlendirmeye Giriş
  • Rotaları Bağlama
  • Değişkenleri Rotalara Aktarma
  • URL'ler oluşturuluyor
  • URL'leri yeniden yönlendir

Yönlendirmeye Giriş

Bu bölümde, yolları nasıl uygulayabileceğinizi, URL'den denetleyicinin eylemine argümanları nasıl geçirebileceğinizi, URL'leri nasıl oluşturabileceğinizi ve belirli bir URL'ye nasıl yeniden yönlendirebileceğinizi göreceğiz. Normalde yollar dosyada uygulanırconfig/routes.php. Yönlendirme iki şekilde uygulanabilir -

  • statik yöntem
  • kapsamlı rota oluşturucu

İşte her iki türü de gösteren bir örnek.

// Using the scoped route builder.
Router::scope('/', function ($routes) {
   $routes->connect('/', ['controller' => 'Articles', 'action' => 'index']);
});
// Using the static method.
Router::connect('/', ['controller' => 'Articles', 'action' => 'index']);

Her iki yöntem de indeks yöntemini çalıştıracaktır. ArticlesController. İki yöntemdenscoped route builder daha iyi performans verir.

Rotaları Bağlama

Router::connect()yöntem yolları bağlamak için kullanılır. Aşağıdaki, yöntemin sözdizimidir -

static Cake\Routing\Router::connect($route, $defaults =[], $options =[])

Üç argüman var Router::connect() yöntem -

  • İlk bağımsız değişken, eşleştirmek istediğiniz URL şablonu içindir.

  • İkinci bağımsız değişken, yönlendirme öğeleriniz için varsayılan değerleri içerir.

  • Üçüncü bağımsız değişken, genellikle düzenli ifade kurallarını içeren yol için seçenekleri içerir.

İşte, bir rotanın temel formatı -

$routes->connect(
   'URL template',
   ['default' => 'defaultValue'],
   ['option' => 'matchingRegex']
);

Misal

Değişiklik yapın config/routes.php dosya aşağıda 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('/', ['controller' => 'Tests', 'action' => 'show']);
   $builder->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
   $builder->fallbacks();
});

Oluşturmak TestsController.php dosya src/Controller/TestsController.php. Aşağıdaki kodu denetleyici dosyasında kopyalayın.

src/Controller/TestsController.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 TestsController extends AppController {
   public function show()
   {
   }
}

Bir klasör oluşturun Tests altında src/Template ve bu klasörün altında bir View fileshow.php olarak adlandırılır. Aşağıdaki kodu o dosyaya kopyalayın.

src/Template/Tests/show.php

<h1>This is CakePHP tutorial and this is an example of connecting routes.</h1>

Http: // localhost / cakephp4 / adresinde bulunan aşağıdaki URL'yi ziyaret ederek yukarıdaki örneği yürütün.

Çıktı

Yukarıdaki URL aşağıdaki çıktıyı verecektir.

Geçti Bağımsız Değişkenler

İletilen bağımsız değişkenler, URL'de iletilen bağımsız değişkenlerdir. Bu argümanlar denetleyicinin eylemine geçirilebilir. Bu aktarılan argümanlar denetleyicinize üç şekilde verilir.

Eylem yöntemine argümanlar olarak

Aşağıdaki örnek, denetleyicinin eylemine argümanları nasıl iletebileceğimizi gösterir. Http: // localhost / cakephp4 / testler / değer1 / değer2 adresinde aşağıdaki URL'yi ziyaret edin

Bu, aşağıdaki rota çizgisiyle eşleşecektir.

$builder->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action' => 'show'],['pass' => ['arg1', 'arg2']]);

Burada, URL'deki değer1 arg1'e ve değer2 arg2'ye atanacaktır.

Sayısal indeksli dizi olarak

Bağımsız değişken denetleyicinin eylemine iletildikten sonra, aşağıdaki ifadeyle argümanı alabilirsiniz.

$args = $this->request->params[‘pass’]

Denetleyicinin eylemine aktarılan argümanlar $ args değişkeninde saklanacaktır.

Yönlendirme dizisini kullanma

Argüman ayrıca aşağıdaki ifade ile eyleme geçirilebilir -

$routes->connect('/', ['controller' => 'Tests', 'action' => 'show',5,6]);

Yukarıdaki ifade, TestController'in show () yöntemine 5 ve 6 numaralı iki bağımsız değişkeni iletir.

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('tests/:arg1/:arg2', ['controller' => 'Tests', 'action' => 'show'],['pass' => ['arg1', 'arg2']]);
   $builder->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
   $builder->fallbacks();
});

Oluşturmak TestsController.php dosya src/Controller/TestsController.php. Aşağıdaki kodu denetleyici dosyasında kopyalayın.

src/Controller/TestsController.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 TestsController extends AppController {
public function show($arg1, $arg2) {
      $this->set('argument1',$arg1);
      $this->set('argument2',$arg2);
   }
}

Bir klasör oluşturun Tests -de src/Template ve bu klasörün altında bir Viewshow.php adlı dosya. Aşağıdaki kodu o dosyaya kopyalayın.

src/Template/Tests/show.php.

<h1>This is CakePHP tutorial and this is an example of Passed arguments.</h1>
<?php
   echo "Argument-1:".$argument1."<br/>";
   echo "Argument-2:".$argument2."<br/>";
?>

Aşağıdaki URL'yi ziyaret ederek yukarıdaki örneği yürütün: http: // localhost / cakephp4 / testing / Virat / Kunal

Çıktı

Yürütme üzerine, yukarıdaki URL aşağıdaki çıktıyı üretecektir.

URL'ler oluşturma

Bu CakePHP'nin harika bir özelliğidir. Oluşturulan URL'leri kullanarak, kodun tamamını değiştirmeden uygulamadaki URL'nin yapısını kolayca değiştirebiliriz.

url( string|array|null $url null , boolean $full false )

Yukarıdaki işlev iki argüman alacaktır -

  • İlk argüman, aşağıdakilerden herhangi birini belirten bir dizidir - 'controller', 'action', 'plugin'. Ek olarak, yönlendirilmiş öğeler veya sorgu dizesi parametreleri sağlayabilirsiniz. Dize ise, herhangi bir geçerli url dizesinin adı verilebilir.

  • Doğruysa, tam temel URL sonucun başına eklenir. Varsayılan yanlıştır.

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('/generate',['controller'=>'Generates','action'=>'show']);
   $builder->fallbacks();
});

Oluşturmak GeneratesController.php dosya src/Controller/GeneratesController.php. Aşağıdaki kodu denetleyici dosyasında kopyalayın.

src/Controller/GeneratesController.php

<?php
declare(strict_types=1);
namespace App\Controller;
21
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class GeneratesController extends AppController {
   public function show()
   {
   }
}

Bir klasör oluşturun Generates at src/Template ve bu klasörün altında bir Viewshow.php adlı dosya. Aşağıdaki kodu o dosyaya kopyalayın.

src/Template/Generates/show.php

<h1>This is CakePHP tutorial and this is an example of Generating URLs<h1>

Aşağıdaki URL'yi ziyaret ederek yukarıdaki örneği yürütün -

http: // localhost / cakephp4 / generate

Çıktı

Yukarıdaki URL aşağıdaki çıktıyı üretecektir -

Yönlendirme Yönlendirme

Yönlendirme yönlendirmesi, istemci uygulamalarına bu URL'nin taşındığını bildirmek istediğimizde kullanışlıdır. URL, aşağıdaki işlev kullanılarak yeniden yönlendirilebilir -

static Cake\Routing\Router::redirect($route, $url, $options =[])

Yukarıdaki işlevin aşağıdaki gibi üç argümanı vardır:

  • Yol şablonunu açıklayan bir dize.

  • Yönlendirilecek bir URL.

  • Rotadaki adlandırılmış öğeleri, o öğenin eşleşmesi gereken normal ifadelerle eşleşen bir dizi.

Misal

Değişiklik Yapın config/routes.phpdosya aşağıda gösterildiği gibi. Burada daha önce oluşturulmuş kontrolörleri kullandık.

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('/generate',['controller'=>'Generates','action'=>'show']);
   $builder->redirect('/redirect','https://tutorialspoint.com/');
   $builder->fallbacks();
});

Aşağıdaki URL'leri ziyaret ederek yukarıdaki örneği yürütün.

URL 1 - http: // localhost / cakephp4 / generate

URL 1 için çıktı

URL 2 - http: // localhost / cakephp4 / yönlendirme

URL 2 için çıktı

Https://tutorialspoint.com adresine yönlendirileceksiniz.