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

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

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

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

Q&A

解決済

1回答

5802閲覧

CakePHP ページ遷移アドレスについて

omusoba-san

総合スコア17

CakePHP

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

0グッド

0クリップ

投稿2017/11/22 08:02

編集2017/11/22 08:41

【環境】
Mac Book
ローカルはXAMPPを使用
CakePHP,XAMMP,MySQLすべて最新版

【やりたいこと】
複数あるページを自由に行き来したい。

【ファイル構造(src/Templete)】
Main
→index.ctp
→test1.ctp
→test2.ctp

【src/Controller/MainController.php】

PHP

1<?php 2namespace App\Controller; 3 4use App\Controller\AppController; 5 6class MainController extends AppController 7{ 8 9 //初期化設定 10 public function initialize() 11 { 12 $this->viewBuilder()->autoLayout(true); 13 $this->viewBuilder()->Layout('Main'); 14 } 15 16 public function index() 17 { 18 } 19 20 public function test1() 21 { 22 } 23 24 public function test2() 25 { 26 } 27 28}

【テンプレート内で使用しているヘッダーのコード(src/Layout/main.ctp)】

HTML

1<header> 2 <h1 id="logo"> 3 <a href=""> 4 <?= $this->Html->image('logo.png',array('width'=>'140','height'=>'20','alt'=>''));?> 5 </a> 6 </h1> 7 8 <nav id="menubar"> 9 <ul> 10 <li><a href="Main">TOPページ<span>test1</span></a></li> 11 <li><a href="Main/test1">テストページ1<span>test1</span></a></li> 12 <li><a href="Main/test2">関連サイトリンク<span>test2</span></a></li> 13 </ul> 14 </nav> 15</header>

【問題点】
「localhost/Cakeapp/Main」でトップページを表示する場合は問題ありませんでした。
そして他のページ、例えばテストページ1(aタグ、リンク先「Main/test1」)に飛ぼうとした場合、遷移アドレスが「localhost/Cakeapp/Main/Main/test1」と重複してしまい、うまく遷移ができませんでした。

【試した方法】
Controllerのfunctionに$this->render()をそれぞれ挿入、ただし無限にアクセスしてしまうため却下。

configのroutes.phpに指定アドレスで動かすControllerなどを指定したが動かず却下。

【まとめ】
現状、DBにTOPのアドレス(ローカルならhttp://localhost/)としてテーブル内に保存しており、ページ表示時にControllerからアドレスを呼び出して、遷移先のアドレスをすべてフル表示にするしかないかなと考えていますが、上記のHTMLの様に簡易的に何度おしてもアドレスが重ならない様にする方法があればと試行錯誤しています。
ネット検索でもページ遷移についてはフォームデータの受け渡しばかり出てくるので、参考になりませんでした。

多分Controllerの書き方か、aタグもしくはroutes.phpの書き方次第ではできるのでしょうか?
ご存知の方がいらっしゃいましたらご共有お願いいたします。
長文失礼いたしました、

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

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

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

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

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

m.ts10806

2017/11/22 08:06

リンク先を「Main/test1」にしているのに他ならないと思うのですが、実際の「テストページ1」のURLは何なのでしょうか。
guest

回答1

0

ベストアンサー

HtmlHelper::linkを使うか、UrlHelper::buildでURLを生成するようにしてみてください。
Controller,Actionを指定すると、それに対応するURLが生成されます。
以下はUrlHelperを使う例です。

php

1<ul> 2 <li><a href="<?= $this->Url->build(['controller' => 'Main', 'action' => 'index']);?>">TOPページ<span>test1</span></a></li> 3 <li><a href="<?= $this->Url->build(['controller' => 'Main', 'action' => 'test1']);?>">テストページ1<span>test1</span></a></li> 4 <li><a href="<?= $this->Url->build(['controller' => 'Main', 'action' => 'test2']);?>">関連サイトリンク<span>test2</span></a></li> 5</ul>

投稿2017/11/23 06:18

ShoheiTai

総合スコア897

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

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

omusoba-san

2017/11/23 07:15

動かしてみたら問題なく表示されました! この方法を参考にさせていただきます、今回はUrlHelperを使用しますが、HtmlHelper::linkの方も調べて使える様にしておきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問