Phalcon

PhalconのURLとパスの生成

更新日:

Phalcon\Mvc\Urlコンポーネントは、Phalconアプリケーションで生成されたURLの責任コンポーネントです。それは、ルートに基づいて生産物の独立のURLです。

ベースURIの設定

Dependendingは、アプリケーションがインストールされているドキュメントルートのどのディレクトリのではなく、ベースURIを持っているか、しない場合があります。

たとえば、/var/www/htdocsにドキュメントルートがあって、あなたのアプリケーションが、/var/www/htdocs/invoにインストールされている場合、あなたのアプリケーションのベースURIは、/invo/になります。あなたがVirtualHostや、アプリケーションを使用して、ドキュメントルートにインストールされている場合、あなたのベースURIは/です。ファルコンによって検出されたベースURIを知るには、次のコードを実行します。

<?php
$url = new Phalcon\Mvc\Url();
echo $url->getBaseUri();

デフォルトでは、ファルコンは自動的にベースURIを検出するかもしれませんが、アプリケーションのパフォーマンスを向上させたい場合は、手動での設定をお勧めします。

<?php
$url = new Phalcon\Mvc\Url();
//相対的ベースURIのセッティング
$url->setBaseUri('/invo/');
//絶対的ベースURIのセッティング
$url->setBaseUri('//my.domain.com/');
//絶対的ベースURIのセッティング
$url->setBaseUri('http://my.domain.com/my-app/');

通常、このコンポーネントは、依存関係インジェクタコンテナに登録する必要がありますので、あなたがそこにそれを設定することができます。

<?php
$di->set('url', function(){
 $url = new Phalcon\Mvc\Url();
 $url->setBaseUri('/invo/');
 return $url;
});

URIの生成

あなたは、デフォルトのビヘイビアと一緒にRouterを使用しています。あなたのアプリケーションは、/:controller/:action/:paramsのパターンに基づいてルートを照合することができます。したがって、それは"GET"メソッドに文字列を渡し、そのパターン(またはルータに定義された他のパターン)を満たすルートを作成するのは簡単です:

<?php echo $url->get("products/save") ?>

ベースURIを付加する必要が無いことに注意してください。あなたがルートを命名している場合は、簡単にそれを動的に作成し、それを変更することができます。たとえば次のようなルートを持っている場合:

<?php
$route->add('/blog/{$year}/{month}/{title}', array(
 'controller' => 'posts',
 'action' => 'show'
))->setName('show-post');

URLは次のように生成することができる。

<?php
//これは、 /blog/2012/01/some-blog-postを生成する
$url->get(array(
 'for' => 'show-post',
 'year' => 2012,
 'month' => '01',
 'title' => 'some-blog-post'
));

Mod-Rewriteを使用せずにURLを生成する

あなたはMOD-リライトせずにURLを作成するためにも、このコンポーネントを使用することができます。

<?php
$url = new Phalcon\Mvc\Url();
//Pass the URI in $_GET["_url"]
$url->setBaseUri('/invo/index.php?_url=/');
//これは、 /invo/index.php?_url=/products/saveを生成
echo $url->get("products/save");

また、 $_SERVER[“REQUEST_URI”]を使用することができます。

<?php
$url = new Phalcon\Mvc\Url();
//Pass the URI in $_GET["_url"]
$url->setBaseUri('/invo/index.php?_url=/');
//$_SERVER["REQUEST_URI"]を使用したURIパス
$url->setBaseUri('/invo/index.php/');

この場合には、手動でルータに必要なURIを処理するために必要です。

<?php
$router = new Phalcon\Mvc\Router();
// ... define routes
$uri = str_replace($_SERVER["SCRIPT_NAME"], '', $_SERVER["REQUEST_URI"]);
$router->handle($uri);

ルートの生成は次のようになります。

<?php
//これは、/invo/index.php/products/saveを生成
echo $url->get("products/save");

VoltでのURLの生成

機能「URL」は、このコンポーネントを使用してURLを生成するために、ボルトで提供されています:

<a href="{{ url("posts/edit/1002") }}">Edit</a>

スタティックルートを生成します。

<link rel="stylesheet" href="{{ static_url("css/style.css") }}" type="text/css" />

静的なURI vs. 動的なURI

このコンポーネントは、アプリケーション内の静的リソースに対する別のベースURIを設定することができます:

<?php
$url = new Phalcon\Mvc\Url();
//動的URIs です
$url->setBaseUri('/');
//CDNを通して静的リソースへ
$url->setStaticBaseUri('http://static.mywebsite.com/');

phalcon\Tagインターフェスは、このコンポーネントを使用して、両方の動的なURIと静的URIを要求します。

独自ジェネレータの実装

Phalcon\Mvc\UrlInterfaceインターフェイスは、ファルコンが提供する1つを交換し、独自のURLジェネレータを作成するために実装する必要があります。

本日のまとめ

  1. URLの設定、取得には、Phalcon\Mvc\Urlコンポーネントを使用する
  2. ベースURIの設定には、setBsseUri()メソッドを使用する
  3. ベースURIの取得には、getBaseUri()メソッドを使用する

-Phalcon

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.