勉強の一環としてcakePHP5をインストールして簡単なデータシステムを構築していたときのこと

あるテーブルにデータを入力するフォームページを構築し、フォームからDBに情報が登録完了すると一覧ページに戻るという流れの動きまでは確認できた。

次にそのデータの詳細を閲覧し、再度一覧ページに移動しようとリンクをクリックするとコントローラーエラーが表示された。

さっき登録したら一覧表示のページに遷移したんだけど・・・

そこでURLを確認すると、なぜか「webroot」という文字が勝手についかされていた。

例えばexamplesというテーブルを用意するとする。

そして、これらはドメインの後に以下のようなURLでデータの一覧、詳細、登録のページが表示される。

 

ドメイン/examples/index → 一覧
ドメイン/examples/view → 詳細
ドメイン/examples/add → 登録

 

問題が起きるのは詳細、登録の画面から一覧ページに戻るリンクから移動するとき。

 

http://ドメイン/examples/add
↓
一覧ページのリンクをクリック
↓
http://ドメイン/webroot/examples/add
↓
エラー

 

しかし、ブラウザのURL枠に直接同じURLを入力すると普通に一覧が表示された。

そこでまず検証として二つ、リンクのURL生成のヘルパーを編集、ルーティングの編集を行ってみた。

 

デフォルトでは一覧に戻るリンクは以下のようになっているのでControllerをつけてみた

 

<?= $this->Html->link(__('List Examples'), ['action' => 'index']) ?>
↓
<?= $this->Html->link(__('List Types'), ['controller'=> 'exmaples', 'action' => 'index']) ?>

 

しかし、リンクにカーソルを重ねたときにブラウザ下部に表示するURL表記は変わらず、移動するときもコントローラーエラーが表示された。

 

次にroutes.phpで以下のように指定のコントローラーのURLだった場合の設定をしてみた

 

$builder->connect('/examples/', ['controller' => 'Examples', 'action' => 'index']);

 

結果は変わらずだった。

 

悩んでいるときにちょっとした思い付きがあった。

これはローカル環境でサブディレクトリ型でやっているからダメなのかな?

実際xamppにいれて開発していたため、何か問題が起きているのかもしれない。

そこで、cakePHPに入っている簡易サーバーを起動させてみることにした。

 

bin/cake server

 

そして以下のURLで確認

 

http://localhost:8765/

 

そうすると、なんと一覧表示ページ遷移できた!

これは環境の問題か?

そういえば、開発環境はサブディレクトリ型で開発をしていた。

それならもしかすると、サブディレクトリの問題か?

よくサブディレクトリ名をみると、以下の名前をつけていた。

 

xampp\htdocs\example\cakePHPファイル群

 

もしかしてサブディレクトリ名が似ているからか?

そこで一度cakePHPを削除し、ディレクトリ名変更してインストールしなおしてみた。

 

xampp\htdocs\proto\cakePHPファイル群

 

テーブルは削除してなかったのでそのまま利用し、テンプレートファイルを生成してブラウザ表示してみると一応確認はできた。

その後、詳細ページ、登録ページから一覧ページへ移動するリンクをクリックするとコントローラーエラーは起きなかった。

 

これはディレクトリやパスやURLがややこしくしてしまったのが原因という勝手に認識した。(合っているかは分からない)

つまり以下のようなことで問題だったのかなと。

 

http://localhost/example/examples/index ← サブディレクトリ名「example」がコントローラー名と重なり問題

http://localhost/proto/examples/index ← サブディレクトリ名変更してエラーなし

 

開発環境はディレクトリ名にも気を付けよう