<commit_before><!-- EN-Revision: 13847 -->
<sect3 id="zend.controller.router.routes.hostname">
    <title>Zend_Controller_Router_Route_Hostname</title>

    <para>
        <code>Zend_Controller_Router_Route_Hostname</code>
        はホスト名によるルートです。標準のルートと同じように動作しますが、
        パスではなくコールされた URL のホスト名に基づいて動作します。
    </para>

    <para>
        標準のルートの例を使用して、
        ホスト名に基づいた動作がどのようなものになるのかを見ていきましょう。
        パスを利用してユーザをコールするのではなく、たとえば
        <code>http://martel.users.example.com</code>
        でユーザ "martel" の情報を見られるようにしたいものとします。
    </para>

    <programlisting role="php"><![CDATA[
$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    ':username.users.example.com',
    array(
        'controller' => 'profile',
        'action'     => 'userinfo'
    )
);

$plainPathRoute = new Zend_Controller_Router_Route_Static('');

$router->addRoute('user', $hostnameRoute->chain($plainPathRoute);
]]>
    </programlisting>

    <para>
        <code>Zend_Controller_Router_Route_Hostname</code>
        のコンストラクタの最初のパラメータはルートの定義で、
        これがホスト名にマッチします。
        ルート定義には静的な部分と動的な部分があり、両者はドット
        ('.') で区切られています。動的な部分 (変数)
        は、変数名の先頭にコロンをつけて <code>:username</code>
        のように表します。静的な部分は、<code>user</code>
        のように単純なテキストで表します。
    </para>

    <para>
        hostname ルートを単独で使うこともできますが、決してしてはいけません。
        その理由は、hostname ルートはそれ単体だと任意のパスにマッチすることになるからです。
        hostname ルートの後には path ルートをつなげなければなりません。
        例に示したように、<code>$hostnameRoute->chain($pathRoute);</code>
        のようにコールすることになります。こうすると、
        <code>$hostnameRoute</code> には何も変更は加えられませんが、新たなルート
        (<code>Zend_Controller_Router_Route_Chain</code>) が返されます。
        そして、これをルータに渡します。
    </para>

    <note>
        <title>パラメータの優先度</title>
        <para>
            hostname ルートと path ルートを連結させるときは、
            hostname ルートのパラメータのほうが
            path ルートのパラメータより優先されます。
            したがって、hostname ルートと path ルートの両方でコントローラを定義した場合は
            hostname ルートで指定したコントローラが選択されます。
        </para>
    </note>

    <sect4 id="zend.controller.router.routes.hostname.config">
        <title><code>Zend_Config</code> 経由での hostname ルートの使用</title>

        <para>
            hostname ルートと path ルートを連結させる場合は、追加の設定パラメータ
            <code>chains</code> を使用します。これは単なるルートのリストで、
            このリストが親のルートに連結されます。
            親ルートおよび子ルートのいずれについても、
            直接ルータに追加されるのではなく連結されたルートに追加されます。
            連結されたルートのルータ内での名前は、
            親ルートの名前と子ルートの名前をダッシュ (-) でつないだものとなります
            単純な設定を XML で書いたものは次のようになります。
        </para>

        <programlisting role="xml"><![CDATA[
<routes>
    <www type="Zend_Controller_Router_Route_Hostname">
        <route>www.example.com</route>
        <chains>
            <index type="Zend_Controller_Router_Route_Static">
                <route></route>
                <defaults module="default" controller="index" action="index" />
            </index>
            <imprint type="Zend_Controller_Router_Route_Static">
                <route>imprint</route>
                <defaults module="default" controller="index" action="index" />
            </imprint>
        </chains>
    </www>
    <users type="Zend_Controller_Router_Route_Hostname">
        <route>users.example.com</route>
        <chains>
            <profile type="Zend_Controller_Router_Route">
                <route>:username</route>
                <defaults module="users" controller="profile" action="index" />
            </index>
        </chains>
    </users>
    <misc type="Zend_Controller_Router_Route_Static">
        <route>misc</route>
    </misc><commit_msg>[ZF-6245]config example is invalid xml<commit_after><!-- EN-Revision: 14784 -->
<sect3 id="zend.controller.router.routes.hostname">
    <title>Zend_Controller_Router_Route_Hostname</title>

    <para>
        <code>Zend_Controller_Router_Route_Hostname</code>
        はホスト名によるルートです。標準のルートと同じように動作しますが、
        パスではなくコールされた URL のホスト名に基づいて動作します。
    </para>

    <para>
        標準のルートの例を使用して、
        ホスト名に基づいた動作がどのようなものになるのかを見ていきましょう。
        パスを利用してユーザをコールするのではなく、たとえば
        <code>http://martel.users.example.com</code>
        でユーザ "martel" の情報を見られるようにしたいものとします。
    </para>

    <programlisting role="php"><![CDATA[
$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    ':username.users.example.com',
    array(
        'controller' => 'profile',
        'action'     => 'userinfo'
    )
);

$plainPathRoute = new Zend_Controller_Router_Route_Static('');

$router->addRoute('user', $hostnameRoute->chain($plainPathRoute);
]]>
    </programlisting>

    <para>
        <code>Zend_Controller_Router_Route_Hostname</code>
        のコンストラクタの最初のパラメータはルートの定義で、
        これがホスト名にマッチします。
        ルート定義には静的な部分と動的な部分があり、両者はドット
        ('.') で区切られています。動的な部分 (変数)
        は、変数名の先頭にコロンをつけて <code>:username</code>
        のように表します。静的な部分は、<code>user</code>
        のように単純なテキストで表します。
    </para>

    <para>
        hostname ルートを単独で使うこともできますが、決してしてはいけません。
        その理由は、hostname ルートはそれ単体だと任意のパスにマッチすることになるからです。
        hostname ルートの後には path ルートをつなげなければなりません。
        例に示したように、<code>$hostnameRoute->chain($pathRoute);</code>
        のようにコールすることになります。こうすると、
        <code>$hostnameRoute</code> には何も変更は加えられませんが、新たなルート
        (<code>Zend_Controller_Router_Route_Chain</code>) が返されます。
        そして、これをルータに渡します。
    </para>

    <note>
        <title>パラメータの優先度</title>
        <para>
            hostname ルートと path ルートを連結させるときは、
            hostname ルートのパラメータのほうが
            path ルートのパラメータより優先されます。
            したがって、hostname ルートと path ルートの両方でコントローラを定義した場合は
            hostname ルートで指定したコントローラが選択されます。
        </para>
    </note>

    <sect4 id="zend.controller.router.routes.hostname.config">
        <title><code>Zend_Config</code> 経由での hostname ルートの使用</title>

        <para>
            hostname ルートと path ルートを連結させる場合は、追加の設定パラメータ
            <code>chains</code> を使用します。これは単なるルートのリストで、
            このリストが親のルートに連結されます。
            親ルートおよび子ルートのいずれについても、
            直接ルータに追加されるのではなく連結されたルートに追加されます。
            連結されたルートのルータ内での名前は、
            親ルートの名前と子ルートの名前をダッシュ (-) でつないだものとなります
            単純な設定を XML で書いたものは次のようになります。
        </para>

        <programlisting role="xml"><![CDATA[
<routes>
    <www type="Zend_Controller_Router_Route_Hostname">
        <route>www.example.com</route>
        <chains>
            <index type="Zend_Controller_Router_Route_Static">
                <route></route>
                <defaults module="default" controller="index" action="index" />
            </index>
            <imprint type="Zend_Controller_Router_Route_Static">
                <route>imprint</route>
                <defaults module="default" controller="index" action="index" />
            </imprint>
        </chains>
    </www>
    <users type="Zend_Controller_Router_Route_Hostname">
        <route>users.example.com</route>
        <chains>
            <profile type="Zend_Controller_Router_Route">
                <route>:username</route>
                <defaults module="users" controller="profile" action="index" />
            </profile>
        </chains>
    </users>
    <misc type="Zend_Controller_Router_Route_Static">
        <route>misc</route>
    </misc>
{'fraction_non_alphanumeric': 0.11348614822106595, 'fraction_numerical': 0.0025312895513992404, 'mean_word_length': 2.5991902834008096, 'pattern_counts': {'":': 0, '<': 163, '<?xml version=': 0, '>': 171, 'https://': 0, 'lorem ipsum': 0, 'www.': 6, 'xml': 3}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7252713', 'n_tokens_mistral': 3307, 'n_tokens_neox': 3007, 'n_words': 309}