Cakephp-routing
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は次の出力を生成します。