CakePHP-ルーティング

この章では、ルーティングに関連する次のトピックについて学習します。

  • ルーティングの概要
  • ルートの接続
  • ルートへの引数の受け渡し
  • URLの生成
  • URLをリダイレクトする

ルーティングの概要

このセクションでは、ルートを実装する方法、URLからコントローラーのアクションに引数を渡す方法、URLを生成する方法、および特定のURLにリダイレクトする方法について説明します。通常、ルートはファイルに実装されますconfig/routes.php。ルーティングは2つの方法で実装できます-

  • 静的メソッド
  • スコープ付きルートビルダー

これは、両方のタイプを示す例です。

// 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']);

どちらの方法も、のインデックスメソッドを実行します ArticlesController。2つの方法のうち、scoped route builder より良いパフォーマンスを提供します。

ルートの接続

Router::connect()メソッドはルートを接続するために使用されます。以下はメソッドの構文です-

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

には3つの議論があります Router::connect() 方法−

  • 最初の引数は、照合するURLテンプレート用です。

  • 2番目の引数には、ルート要素のデフォルト値が含まれています。

  • 3番目の引数には、ルートのオプションが含まれています。これには通常、正規表現のルールが含まれています。

ここに、ルートの基本的な形式があります-

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

に変更を加える config/routes.php 以下に示すようにファイルします。

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

作成する TestsController.php でファイル src/Controller/TestsController.php. 次のコードをコントローラーファイルにコピーします。

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()
   {
   }
}

フォルダを作成する Testssrc/Template そのフォルダの下に、 View fileshow.phpと呼ばれます。そのファイルに次のコードをコピーします。

src/Template/Tests/show.php

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

http:// localhost / cakephp4 /で入手できる次のURLにアクセスして、上記の例を実行します。

出力

上記のURLは、次の出力を生成します。

渡された引数

渡される引数は、URLで渡される引数です。これらの引数は、コントローラーのアクションに渡すことができます。これらの渡された引数は、3つの方法でコントローラーに渡されます。

アクションメソッドの引数として

次の例は、コントローラーのアクションに引数を渡す方法を示しています。次のURLにアクセスしますhttp:// localhost / cakephp4 / tests / value1 / value2

これは、次のルートラインと一致します。

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

ここでは、URLのvalue1がarg1に割り当てられ、value2がarg2に割り当てられます。

数値インデックス付き配列として

引数がコントローラーのアクションに渡されると、次のステートメントで引数を取得できます。

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

コントローラのアクションに渡された引数は、$ args変数に格納されます。

ルーティングアレイの使用

引数は、次のステートメントによってアクションに渡すこともできます-

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

上記のステートメントは、2つの引数5と6をTestControllerのshow()メソッドに渡します。

に変更を加える config/routes.php 次のプログラムに示すようにファイル。

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

作成する TestsController.php でファイル src/Controller/TestsController.php. 次のコードをコントローラーファイルにコピーします。

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

フォルダを作成する Testssrc/Template そのフォルダの下に作成します Viewshow.phpというファイル。そのファイルに次のコードをコピーします。

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/>";
?>

次のURLにアクセスして、上記の例を実行しますhttp:// localhost / cakephp4 / tests / Virat / Kunal

出力

実行すると、上記のURLは次の出力を生成します。

URLの生成

これはCakePHPのクールな機能です。生成されたURLを使用すると、コード全体を変更することなく、アプリケーションのURLの構造を簡単に変更できます。

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

上記の関数は2つの引数を取ります-

  • 最初の引数は、次のいずれかを指定する配列です- 'controller', 'action', 'plugin'。さらに、ルーティングされた要素またはクエリ文字列パラメーターを提供できます。文字列の場合、任意の有効なURL文字列の名前を付けることができます。

  • trueの場合、完全なベースURLが結果の前に付加されます。デフォルトはfalseです。

に変更を加える config/routes.php 次のプログラムに示すようにファイル。

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

作成する GeneratesController.php でファイル src/Controller/GeneratesController.php. 次のコードをコントローラーファイルにコピーします。

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()
   {
   }
}

フォルダを作成する Generates at src/Template そのフォルダの下に、 Viewshow.phpというファイル。そのファイルに次のコードをコピーします。

src/Template/Generates/show.php

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

次のURLにアクセスして、上記の例を実行します-

http:// localhost / cakephp4 / generate

出力

上記のURLは次の出力を生成します-

リダイレクトルーティング

リダイレクトルーティングは、このURLが移動されたことをクライアントアプリケーションに通知する場合に役立ちます。次の関数を使用してURLをリダイレクトできます-

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

上記の関数には次の3つの引数があります-

  • ルートのテンプレートを説明する文字列。

  • リダイレクト先のURL。

  • その要素が一致する必要がある正規表現へのルート内の名前付き要素に一致する配列。

に変更を加える config/routes.php以下に示すようにファイルします。ここでは、以前に作成したコントローラーを使用しました。

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

以下のURLにアクセスして、上記の例を実行してください。

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

URL1の出力

URL 2 − http:// localhost / cakephp4 / redirect

URL2の出力

https://tutorialspoint.comにリダイレクトされます