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()
{
}
}
フォルダを作成する Tests 下 src/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);
}
}
フォルダを作成する Tests で src/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にリダイレクトされます