Cakephp-routing

提供:Dev Guides
移動先:案内検索

CakePHP-ルーティング

ルーティングは、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つの方法のうち、*スコープ付きルートビルダー*はパフォーマンスを向上させます。

ルートを接続する

  • 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\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('/', ['controller' => 'Tests', 'action' => 'index']);
      $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
      $routes->fallbacks('DashedRoute');
   });
   Plugin::routes();
*src/Controller/TestsController.php* に *TestsController.php* ファイルを作成します。 次のコードをコントローラーファイルにコピーします。
*src/Controller/TestsController.php*
<?php
   namespace App\Controller;
   use App\Controller\AppController;

   class TestsController extends AppController{
      public function index(){
      }
   }
?>
*src/Template* の下に *Tests* フォルダーを作成し、そのフォルダーの下に *index.ctp* という* Viewファイル*を作成します。 そのファイルに次のコードをコピーします。
*src/Template/Tests/index.ctp*
This is CakePHP tutorial and this is an example of connecting routes.

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

*http://localhost:85/CakePHP/*

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

ルーティング

渡された引数

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

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

次の例は、コントローラーのアクションに引数を渡す方法を示しています。

次のURLにアクセスしてください- http://localhost:85/CakePHP/tests/value1/value2

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

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

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

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

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

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

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

ルーティング配列の使用

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

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

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

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

*config/routes.php*
<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action'=>
         'index'],['pass' =>['arg1', 'arg2']]);

      $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
      $routes->fallbacks('DashedRoute');
   });

   Plugin::routes();
*src/Controller/TestsController.php* に *TestsController.php* ファイルを作成します。 次のコードをコントローラーファイルにコピーします。
*src/Controller/TestsController.php*
<?php
   namespace App\Controller;
   use App\Controller\AppController;

   class TestsController extends AppController{
      public function index($arg1,$arg2){
         $this->set('argument1',$arg1);
         $this->set('argument2',$arg2);
      }
   }
?>
*src/Template* に *Tests* フォルダーを作成し、そのフォルダーの下に *index.ctp* という *View* ファイルを作成します。 そのファイルに次のコードをコピーします。
*src/Template/Tests/index.ctp*
This is CakePHP tutorial and this is an example of Passed arguments.<br/>
Argument-1: <?=$argument1?><br/>
Argument-2: <?=$argument2?><br/>

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

*http://localhost:85/CakePHP/tests/Virat/Kunal*

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

CakePHPルーティング