2

私は Zend Framework でこの問題を抱えており、headLink と headScript を次のようにしたいと考えています。

$this->headLink()->appendStylesheet('styles/my.css');

しかし、ビューのページ ソースを表示して css のリンクをクリックすると、リンクは次のようになります。

http://localhost/mysite/public/user/profile/id/styles/my.css

ユーザーにはコントローラーの1つがあり、プロファイルはアクションのものです。一方、idは単なるパラメーターです。リンクは公開を指していませんでした。

もう 1 つの問題は、ビューの 1 つに AJAX スクリプトがある場合、次のような別の URL からデータを取得することです。

$(document).ready(function(){
      ...
            $.ajax({
                type: 'post',
                dataType: 'json',
                url: '../region/getcountryregions',
                data: { id : test_id },
                success: function(result){
                     // success
                }, error: function(request, status, error){
                    console.log(request.responseText);
                }
      ...
});

私のこのURLで完璧に動作します:

http://localhost/mysite/public/user/registration

しかし、URL が次のような場合:

http://localhost/mysite/public/user/profile/id/20

上記の両方のビューには、AJAX を使用した同じスクリプト タグがあります。問題は、2 番目のリンクが次の URL を指していることです。

http://localhost/mysite/public/user/profile/region/getcountryregions

region は Controller であり、getcountryregions は controller 領域の Action であるため、これはエラーです。

リンクを次の場所に移動する方法はありますか:

http://locahost/mysite/public/

上記のようなリンクが公開パスに簡単に誘導されるようにします。そして、ライブサーバーにアップロードするときにこれらのリンクに影響を与えることなく.

4

1 に答える 1

3

これは、標準の相対URLと絶対URLの問題です。あなたの呼び出し:

$this->headLink()->appendStylesheet('styles/my.css');

暗黙的に相対URLを参照します。したがって、ページを表示している場合:

http://localhost/mysite/public/user/profile/

次に、相対アドレスは、現在のページを基準としてブラウザstyles/my.cssによって解釈されます。

BaseUrlビューヘルパーはこの問題を軽減できます。

$this->headLink()->appendStylesheet($this->baseUrl('styles/my.css'));

AJAX状況に対する同様の修正が適用されます。baseUrl()ビュースクリプトでは、ビューヘルパーを介してすべての直接URLレンダリングを実行するようにしてください。

/public補足として、通常、 URLの一部を公開することはありません。ディレクトリ自体はpublic、仮想ホストのルートとしてマップされます。共有ホスティングを使用していて、そのマッピングを自分で指定できない場合は、いくつかの回避策があります。

于 2012-08-21T04:02:34.467 に答える