2013-02-21 18 views
7

私はbaseUrlが(Zend Frameworkの学習から)何かを理解しようとしていましたが、このようなユビキタスユーティリティでは、1人の "エキスパート"やブロガーがbaseUrl学習者はそれが何であるかを知ることができます。彼らは皆、あなたがそれが何であるかを知っていると仮定し、次にそれを導き出します。それぞれは自分の方法で自分の結果に到達します。正確にbaseUrlとは何か

私は自然にそれが(名前から暗示されているように)$_SERVER["HTTP_HOST"]または$_SERVER["SERVER_NAME"]によってアクセスされると思うだろうと思う人もいますが、これらは意外にもこれらの少数派であるようだ。

一部は(まあ、少なくともそれはだ他の人がそれはそのことについては、上記または任意のURLのいずれかであることができると思う一方で、サーバー名

に追加$_SERVER["REQUEST_URI"]または$_SERVER["PHP_SELF"]によってアクセスされる現在のページだと思います私が得る印象)、ユーザーがそれを使いたいかどうかに依存します。

誰かが私が「専門家」であり、なぜそれが必要なのだろうと仮定せずに、baseUrlが何であるかを正確に説明できますか?ありがとうございました。

EDIT: baseUrlはほとんどのZendプロジェクトで自動的に設定されるはずですが、私の場合はそうではありません。 echo $this->baseUrl()またはvar_dump($this->baseUrl())を実行しても、何も得られません。だから私は本当にこのユーティリティが何であるか分かりません。

+0

baseurlは、サーバーに応じて絶対パスを定義します。サーバーが変更された場合は、手動で変更する必要はありません。 – ripa

答えて

17

あなたがbaseUrl()施設を持っている必要がある理由のための短い答えはこれです:アプリが展開されている

は設定の問題ではなく、CORでなければなりませんeアプリケーション機能の問題

多くの場合、ほとんどの場合でも、アプリケーションのベースURLは、単に$_SERVER['HTTP_HOST']または$_SERVER['SERVER_NAME']になります。

しかし、必ずしもそうではありません。

を検討するための最も簡単な例では、通常のページを持っている標準のウェブサイトです。

  • http://example.com/
  • http://example.com/contact
  • http://example.com/about
  • // etc

今、あなたが書いた(または購入またはOSSパッケージとしてダウンロード)、ブログアプリケーション

  • http://example.com/blog/post/my-post-slug
  • http://example.com/blog/categories/some-category
  • //etc

これらのすべてのリンク:ブログのようなリンクを持っている可能性が

http://example.com/blog

:あなたは、URLの下に展開したいと考えていることに住んでいる。

ブログアプリケーション自体には、とブログ内のリンク/ページ/ルーティングのみが関係している必要があります。あなたのブログテンプレートにはヘッダー/フッターのリンクが他のサイトに戻ってくるかもしれませんが、残りのコアブログアプリケーションの機能はあなたのサイトの残りの部分について知っている必要はありません。どうやら、ブログアプリケーションは、ブログ投稿とブログカテゴリ、および他のすべてのブログ関連のページへのリンクを生成するときには、すべて接頭語「http://example.com/blog」にする必要があることを知る必要があります。

$_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME']は、この環境/デプロイメント情報を反映していません。リンクを生成するときに、base-url値を使用してアプリケーションを設定して(常にこの設定を消費する)何らかのbaseUrl()関数を使用することは、コアアプリケーションの機能を外部のデプロイメントファクタではなく独自のビジネスに集中させるための良い方法です。

+0

ありがとう@すべて。しかし、baseUrlは自動的に設定されるはずですか? [this thread](http://stackoverflow.com/questions/5802501/how-to-set-baseurl?rq=1)で選択した答えでサポートされていますが、私が 'echo $ this-> baseUrl ); 'var_dump($ this-> baseUrl());'それは何も出現しません。 –

+0

興味深いことに、この瞬間の時点で、その質問に対する受け入れられた回答は最高の投票ではありません。実際、フレームワークはbaseUrlを推測しようとします。ただし、サーバーの公開ドキュメントルートの厳密な下にあるパスで展開する場合や、サーバーの設定で珍しいものがある場合は、必ずしも正しいとは限りません。 [Zend_Controller_Request_Httpの:: setBaseUrl()](http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Controller/Request/Http.php)で複雑なアルゴリズムを参照してください。 –

2

あなたのウェブサイトは、一連のウェブページで構成されています。各Webページには、http://www.your.com/intro.htmのような完全なURL(Uniform Resource Locator)があります。 あなたのウェブページのURLは、通常この場合はhttp://www.your.com/のように同じ文字のセットで始まります。この共通プレフィックスは、あなたがベースURLと呼ぶものです。

ベースURLを使用すると、参照する各ページの完全なURLを見るか入力する必要がないため、作業が簡単になります。

それとも

ZendのURLを理解するには、ドキュメント名または末尾のスラッシュ/

を添加することによって、「絶対URL」に「相対URL」を変換するために、ページに割り当てられたURLこのlink

を参照してください。
関連する問題