この章では、ルーティングに関連する次のトピックについて学習します -
このセクションでは、ルートを実装する方法、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 つの方法のうち、スコープ ルート ビルダー の方がパフォーマンスが優れています。
Router::connect() メソッドはルートの接続に使用されます。以下はメソッドの構文です -
static Cake\Routing\Router::connect($route, $defaults =[], $options =[])
Router::connect() メソッドには 3 つの引数があります -
最初の引数は、照合する 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(); });
src/Controller/TestsController.php に 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() { } }
src/Template の下にフォルダー Tests を作成し、そのフォルダーの下に show.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(); });
src/Controller/TestsController.php に 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); } }
src/Template にフォルダー Tests を作成し、そのフォルダーの下に show.php という名前の View ファイルを作成します。そのファイルに次のコードをコピーします。
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 は次の出力を生成します。
これは 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(); });
Create a GeneratesController.php file at src/Controller/GeneratesController.php. Copy the following code in the controller file.
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() { } }
Create a folder Generates at src/Template and under that folder, create a View file called show.php. Copy the following code in that file.
src/Template/Generates/show.php
<h1>This is CakePHP tutorial and this is an example of Generating URLs<h1>
Execute the above example by visiting the following URL −
http://localhost/cakephp4/generate
The above URL will produce the following output −
Redirect routing is useful, when we want to inform client applications that, this URL has been moved. The URL can be redirected using the following function −
static Cake\Routing\Router::redirect($route, $url, $options =[])
There are three arguments to the above function as follows −
A string describing the template of the route.
A URL to redirect to.
An array matching the named elements in the route to regular expressions which that element should match.
Make Changes in the config/routes.php file as shown below. Here, we have used controllers that were created previously.
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(); });
Execute the above example by visiting the following URLs.
URL 1 − http://localhost/cakephp4/generate
URL 2 − http://localhost/cakephp4/redirect
You will be redirected to https://tutorialspoint.com
以上がCakePHP ルーティングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。