質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

757閲覧

cakephp3系:URLの生成が上手くいかない、、

oroshitaruuuuu

総合スコア25

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2018/11/20 06:06

やりたいこと

あるコントローラから生成された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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/11/20 06:09

Sample/  → /Sample/ ではどうですか?(確認できる環境ないので確認依頼です)
oroshitaruuuuu

2018/11/20 06:33

/Sample/Articleに変更しましたが、所望のURLは出力されませんでした、、
guest

回答1

0

自己解決

無事に解決しました。
最初はjsで動的に生成しようと思ったのですが、それでも上手く行きませんでした。
他でリンクのURLを生成する方法を調べ、以下のような書き方も出来る事を知ったので試してみたところ、
所望のURLを生成することが出来ました。
案外、普通w
お疲れ様でした!

<?= $this->Html->link("Test","Sample/Article/".$article["id"]]) ?>

投稿2018/11/21 07:38

oroshitaruuuuu

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問