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

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

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

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

Q&A

解決済

3回答

2116閲覧

cakephpが作成したurlが http://domain.com/smaple/sample/Tasks/index

hashibata

総合スコア18

CakePHP

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

0グッド

0クリップ

投稿2015/06/21 12:22

編集2015/06/21 23:16

お世話になります。

実行環境:
VirtualBox+CentOS
PHP 5.4.30
CakePHP 2.6.7

cakephpを入れて、入門本のサンプルを実行していってます。
下記のコードを実行して画面にmsgを表示できたのですが、msgに張ってあるURLが
件名のようにsampleが重複したURLになっています。
(sampleはインストールディレクトリ。/var/www/html/sample/)

$this->setFlash($msg, '/Tasks/index');

誤) http://domain.com/smaple/sample/Tasks/index
正) http://domain.com/smaple/Tasks/index

途中で何か設定を飛ばしてしまったのでしょうか。
よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

こちらですがApacheのルートディレクトリはどの様に設定されているのでしょうか?
もしかすると、Apacheのルートディレクトリが下記のようになっていませんか?

DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

DocumentRoot "/var/www/html/sample"
<Directory "/var/www/html/sample">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

問題が無いのであれば、上記のように変更してみては如何ですが?
こちらは、あくまでもWEBディレクトリ直下にCakePHPが居ると言う設定になります。
WEBサイトのサブディレクトリにデータがある場合は上記とは別の方法があります。

投稿2015/06/21 23:30

takayukiinaba

総合スコア1158

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

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

hashibata

2015/06/22 00:33

コメントをいただき、ありがとうございます。 おっしゃるとおり、確かになっています。 よろしければサブディレクトリにデータがある場合も教えていただけないでしょうか? /DocumentRoot(/var/www/html) -/sample(cakephp) -/othersite サイト全体をcakephpで構築するというよりも サブディレクトリで構築したいと考えています。 よろしくお願いします。
hashibata

2015/06/22 04:26

ありがとうございます。 参照しながら設定してみましたが、変化はありませんでした。 少し古いバージョンのcakephpでも再現しました。 また$this->flash('HELLO', array('controller' => 'Tasks', 'action' => 'index')); という表現にしても再現しました。 同様の症状がないか、もう少し探ってみます。
takayukiinaba

2015/06/22 04:31

私の方でも時間を見付けて情報を集めてみます。
hashibata

2015/06/22 07:36

ご親切にしていただきありがとうございます。
takayukiinaba

2015/06/22 07:42

/DocumentRoot(/var/www/html)  -/sample(cakephp)   -/app    -/webroot -/othersite のようなディレクトリ構成なのでしょうか? それとも /DocumentRoot(/var/www/html)  -/sample(cakephp)   -/webroot -/othersite な感じになっていますか?
hashibata

2015/06/22 08:34

最初に書かれた方になります。 以下、フルパスです。 /var/www/html/sample /var/www/html/sample/app /var/www/html/sample/app/webroot /var/www/html/othersite
takayukiinaba

2015/06/22 08:42

◆/var/www/html/sample/.htaccess <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] RewriteBase /sample </IfModule> ◆/var/www/html/sample/app/.htaccess <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] RewriteBase /sample/app </IfModule> ◆/var/www/html/sample/app/webroot <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] RewriteBase /sample/app/webroot </IfModule> これでいけるような気がするんだけど・・・・。
hashibata

2015/06/22 10:33

衝撃の事実が分かりました…。 解決しました…。 実はどうしても原因が分からなかったので、 私のサーバの設定が間違っているのだと思い cakephp2.6.7をロリポップのサーバーに上げてみました。 そうするとなんと同じようにsampleが重複しました。 つまりサーバの設定じゃなかったんですね。 また数時間悩んで、どうしようもなくなったので いっそバーションを書籍と同じ2.2.0まで落としたところ 解決してしまいました。 でもこれは解決したと言えるのか…。
hashibata

2015/06/22 11:07

境界を調べました。 2.5.4 sample ------------- 2.5.5 sample/sample どうやら2.5.5で何かが変わって、重複するようになってしまったようです。
takayukiinaba

2015/06/22 11:44

なるほどですね。 単純ですが、結構こういう事はハマるんですよね><
hashibata

2015/06/22 12:48

ハマってしまいました。 takayukiinabaさん、長らくお付き合いくださりありがとうございました。 頂戴した.htaccessの設定も試したのですが、うまくいかなかったので やけっぱちになったのがよかったのかもしれません。 これでようやく前に進めます。
hashibata

2015/06/29 04:53

CakePHPのコードを読んで、ようやくあと少しというところまできています。 Viewクラスに_evaluteという関数があるのですが $dataForView配列を、ローカル変数に展開し $viewFileをインクルードすることで インクルードファイルに書かれた<?php echo $url; ?>が有効になる、 この仕組をrenderと呼んでいるようです。 View(View.php) protected function _evaluate($viewFile, $dataForView) { /* $viewFile:/var/www/html/cakephp-2.5.4/app/View/Layouts/flash.ctp $viewFile:/var/www/html/cakephp-2.5.4/app/View/Layouts/flash.ctp $dataForView = array( 'pageTitle' => 'HELLO', 'pause' => 1, 'message' => 'HELLO', 'url' => '/cakephp-2.5.5/Tasks/index', 'content_for_layout' => '', 'scripts_for_layout' => '', 'title_for_layout' => 'Tasks', ); */ $this->__viewFile = $viewFile; extract($dataForView); ob_start(); include $this->__viewFile; unset($this->__viewFile); return ob_get_clean(); } 2.5.4:flash.ctp <a href="<?php echo $url; ?>" 2.5.5も上のように書けば問題は起きないのですが、 2.5.5はここからさらに <?php echo $this->Html->link($message, $url); ?> としています。 linkメソッドで重複が発生しているようです。
hashibata

2015/06/29 06:08 編集

ようやく合点がいきました(コードからの分析ですが) 1.私のテキストが2.5.4対応のテキストで古い(2.5.5以降で使えない内容が載っている) 2.2.5.5以降では、flashメソッドを使わないか、httpプロトコルから記述する マイナーバージョンの違いだから大丈夫だと思ったけど、油断したなぁ…。 これでこの質問を閉じます。ありがとうございました。
takayukiinaba

2015/06/29 06:11

なるほど。 こういった事象もあるのですね・・・・。 私は、直にライブラリをデバックしてしまう癖があるので余り気にした事が無かったのですが・・・。 何れにしても try and error ですね。
guest

0

境界を調べました。

2.5.4 sample

2.5.5 sample/sample

どうやら2.5.5で何かが変わって、重複するようになってしまったようです。

投稿2015/06/22 11:06

hashibata

総合スコア18

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

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

0

ご親切にしていただきありがとうございます。

投稿2015/06/22 07:34

hashibata

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問