やりたいこと
あるコントローラから生成されたURLと他のコントローラから生成されたURLが異なるので、片方に統一したい。
①SampleディレクトリのUserテンプレートからURL生成した時、
<?= $this->Html->link("Test",['controller'=>'/Article', 'action'=>'view', 'id' => $article["id"]]) ?> // http://www.localhost/Article/100
②HomeテンプレートからURL生成した時、
<?= $this->Html->link("Test",['controller'=>'Sample/Article', 'action'=>'view', 'id' => $article["id"]]) ?> // http://www.localhost/Article/view?id=100
のようになります。
②のURLを①のURLにしたいのですが、どうしたらいいでしょうか。
ルーティング設定
Router::scope('/', function (RouteBuilder $routes) { $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); $routes->connect('/home', ['controller' => 'Home', 'action' => 'index']); /* * prefixで階層有効 */ Router::prefix('Sample', function ($routes) { $routes->connect('/', ['controller' => 'User', 'action' => 'view']); $routes->connect('/', ['controller' => 'Article', 'action' => 'view']) ->setPass(['id']) // `id` が一致するパターンを定義します。 ->setPatterns([ 'id' => '[0-9]+', ]); $routes->fallbacks(DashedRoute::class); });
ディレクトリ構造
//コントローラは一部階層になっている app - config - routes.php - src - Controller - HomeController.php - Sample - User.php - Article.php - Template - Home - view.ctp - Sample - User - view.ctp - Article - view.ctp
コントローラ
// Article/Controller /** * View method */ public function view($id = null){ // 以下$idを使った処理 }
環境
CakePHP 3.6
MAMP
回答1件
あなたの回答
tips
プレビュー