1

まず、ホームページを読み込んで、すべての画像を読み込んでOKです。しかし、リンクをクリックして別のアクション (表示アクション) を呼び出すと、画像が読み込まれません。

それは私の画像パスとview.ctpファイルです:

webroot のイメージ パス

そしてそれはビューアクションです:

public function view($id = NULL) 
{  
    $this->layout= false;  
    $post = $this->Post->read(NULL, $id);  
    if(isset($this->params['requested'])){  
        return $post;  
    }  
    $this->set('post',$post);  
}  
4

2 に答える 2

4

PATHS に夢中にならないでください :) CakePHP メソッドを使用し、それを忘れてください。

以前も同じ問題がありました。

簡単な方法は、すべての画像を次の場所に保存することです

/アプリ/ウェブルート/img

または任意のサブフォルダー。

そして、HTML ヘルパーを使用してそれらを印刷します。

echo $this->Html->image("name_of_image.jpg", array("alt" => "alternative_text"));

画像ヘルパー の使用方法の詳細については、 http: //book.cakephp.org/2.0/en/core-libraries/helpers/html.html#HtmlHelper ::image を参照してください。

CSS、JS ファイルの読み込み、リンクの作成に同じルールを適用できます... CakePHP 関数を正しい方法で使用し、パスの問題を忘れてください。

于 2012-11-18T20:14:47.220 に答える
3

URL または一般的なファイル システムで使用される相対パスと絶対パスを理解していません。別の場所から始めましょう。

  1. CSS フォルダーに画像を配置しないでください。デフォルトのcakephpベイクアプリに小文字ですでに存在するcssフォルダーは、CSSファイルの保存に使用されます。それ以上でもそれ以下でもありません。画像は webroot ディレクトリの "img" フォルダにあります。
  2. ケーキかどうかに関係なく、常に完全な小文字を使用して、webroot 内の URL とディレクトリとファイルを使用する必要があります。これは、Debian のような優れた Web ホスティング オペレーティング システムのほとんどが Linux をベースにしているため、大文字と小文字の書き方に違いがあるためです。これを行わない唯一の OS は Windows です (私の知る限り)。あなたがWindowsでコーディングしていることは知っていますが、これがあなたが台無しにしたコードがすべて機能する理由です.
  3. ロスの解決策は、「img」ディレクトリに画像を配置するというこのリストの最初のポイントと競合することを除いて、正しいです。パスには常に CakePHPs ビルドイン ソリューションを使用する必要があります。このようにして、アプリをサブディレクトリに配置したり、ドイツのホスティング会社のような愚かなシステムでホストしたりしても、アプリがいつでも崩壊しないようにします...ここに名前はありません.

問題: パスについて知っておく必要があることがいくつかあります。絶対パスがあります。これらは、ファイルシステムのルートから目的のポイントまでの情報を提供しています: 例: /var/www/somefolder/someapp/webroot/index.php (Linux) C:\www\somefolder\someapp\webroot\index. php (ウィンドウズ)

ファイルシステムの奥深くにいるときや、絶対パスと相対パスが「発明」されたことさえ知らない環境にいるときに、これを簡単に処理できるようにします。上で指定したディレクトリにいて、アプリケーションの「Config/core.php」にアクセスする、または含めるとします: ../Config/core.php (Linux) ..\Config\core.php (Windows -スラッシュがバックスラッシュであることを除いて、ここでは特別なことは何もありません)

これが基本的に行うことは、「webroot」の親ディレクトリに戻ることです。この場合は「/var/www/somefolder/someapp/」(Linux) で、Windows の場合は「C:\www\somefolder\someapp\」です。そこから再び「Config」フォルダに進み、その後 core.php にアクセスします。

このスキーマは URL にも適用されます。例: www.example.com/pages/imprint/。通常、サーバーは、ホスティングの webroot で "pages" フォルダーを検索します。そこで、「インプリント」フォルダを検索します。その後、サーバー構成に基づいて、そのフォルダーで「index.html」または「index.php」、またはサーバーがインデックスファイルとして使用するようにアドバイスしたその他のファイルを検索します。または、フォルダーの内容を出力することもできます。

"[application]/webroot/" フォルダー内の .htaccess ファイルを使用すると、この動作は CakePHP の index.php ファイルにリダイレクトされます。Cake は URL を分析し、有効なコントローラ アクションまたはルートがあるかどうかをチェックし、その後、適切なコードを実行します。しかし!このルールは、webroot ディレクトリ内の実際のファイルやフォルダーには適用されません。(webroot フォルダーの htaccess ファイルを見て、そこで使用されているコマンドを検索してください)。正しい構文を使用していれば、css ファイルを問題なく配信できるのはこのためです。CakePHP はその URL に folder url 構文を使用するため、相対 URL を指定することは問題です。これは、ほとんどの場合、特定の 1 つのページにしか適切でないためです。例/pages/imprint ../img/blabla.gif使用する URL は「webroot/img/blabla.gif」であるため、webroot に戻って特定の画像を表示します。しかし、同じアプリケーション/products/view/1では、パス../img/blabla.gifは実際のファイルではない "webroot/products/img/blabla.gif" になり、cakephp はそれを処理しようとし、 URL が有効でないため、失敗します。

これが役立つことを願っています。

それらのパスをもう少しチェックアウトします。それらを理解することはプログラミングにとって不可欠であり、それは当時私を大いに助けてくれました ;)

こんにちは func0der

于 2012-11-18T18:18:32.903 に答える