URL とパスを生成する ========================= :doc:`Phalcon\\Mvc\\Url <../api/Phalcon_Mvc_Url>` は Phalcon アプリケーションに置いて、URL 生成を担うコンポーネントです。 ルーティングをベースにした、個々の URL を生成する能力があります。 ベース URI の設定 ------------------ アプリケーションをインストールしたドキュメントルートのディレクトリの状況に応じて、ベース URI が必要になる場合があります。 例えば、ドキュメントルートが /var/www/htdocs であなたのアプリケーションが /var/www/htdocs/invo にインストールしてある場合、ベース URI は /invo/ になります。 VirtualHost を使っていたり、またはドキュメントルート直下にインストールしている場合、ベース URI は / になります。 Phalcon が検出しているベース URI を確認するため、下記のコードを実行しましょう。 .. code-block:: php getBaseUri(); Phalcon は、デフォルトでは自動的にベース URI を検出します。 しかしアプリケーションのパフォーマンスを向上させたい場合は、設定を手動で行うことを推奨しています。 .. code-block:: php setBaseUri("/invo/"); // ベース URI としてフルドメインを指定する $url->setBaseUri("//my.domain.com/"); // ベース URI としてフルドメインを指定する $url->setBaseUri("http://my.domain.com/my-app/"); 通常、このコンポーネントは DI コンテナ内で登録されなければならないので、下記のように設定することもできます。 .. code-block:: php set( "url", function () { $url = new Url(); $url->setBaseUri("/invo/"); return $url; } ); URI の生成 --------------- もし、:doc:`ルーティング `のデフォルトの振る舞いを使用するならば、 あなたのアプリケーションのルーティングパターンは /:controller/:action/:params にすることができます。 従って、ルータ内部で定義しているあらゆるパターン含め、GET メソッドへ渡す文字列パターンも簡単に作ることができます。 .. code-block:: php get("products/save"); ?> ベース URI を先頭につける必要が無いことに注意してください。名前をつけたルートであれば、動的に簡単に変更、作成ができます。 例えば、次のようなルートを持っていたとします。 .. code-block:: php add( "/blog/{year}/{month}/{title}", [ "controller" => "posts", "action" => "show", ] )->setName("show-post"); URL は次のような方法で生成することができます。 .. code-block:: php get( [ "for" => "show-post", "year" => "2015", "month" => "01", "title" => "some-blog-post", ] ); mod_rewrite を使用せずに URL を生成する ------------------------------------ mod_rewrite を使用せずに URL を生成する場合も、このコンポーネントを使うことができます。 .. code-block:: php setBaseUri("/invo/index.php?_url=/"); // 出力結果は /invo/index.php?_url=/products/save となります。 echo $url->get("products/save"); この際、:code:`$_SERVER["REQUEST_URI"]` を使うことも可能です。 .. code-block:: php setBaseUri("/invo/index.php?_url=/"); // $_SERVER["REQUEST_URI"] を使っ、マニュアルでハンドルが必要になります。て URI を渡す $url->setBaseUri("/invo/index.php/"); この場合、ルーター内で要求した URI をマニュアルで対処する必要があります。 .. code-block:: php handle($uri); 結果のルートは下記のようになります .. code-block:: php get("products/save"); Volt での URL の生成 ------------------------ Volt 内部でこのコンポーネントを使って URL を生成するために url という関数を用意しています。 .. code-block:: html+jinja Edit 静的なルートが生成されます。 .. code-block:: html+jinja 静的な URI vs. 動的な URI ----------------------- このコンポーネントは、同一アプリケーション内で異なるベース URI を設定することも許されています。 .. code-block:: php setBaseUri("/"); // 静的リソースは CDN へ $url->setStaticBaseUri("http://static.mywebsite.com/"); :doc:`Phalcon\\Tag ` は、このコンポーネントを使った動的・静的 URI の両方を要求します。 独自 URL ジェネレータの実装 ----------------------------------- Phalcon が提供している URL ジェネレータの代わりに独自で URL ジェネレータを作成する場合、 :doc:`Phalcon\\Mvc\\UrlInterface <../api/Phalcon_Mvc_UrlInterface>` インターフェースを必ず実装してください。