URLヘルパー
URLヘルパーファイルには、URLの操作を支援する関数が含まれています。
このヘルパーの読み込み
このヘルパーは、すべてのリクエストでフレームワークによって自動的にロードされます。
利用可能な関数
以下の関数が利用可能です
- site_url([$uri = ''[, $protocol = null[, $altConfig = null]]])
- パラメータ:
$uri (
array|string
) – URI文字列またはURIセグメントの配列$protocol (
string
) – プロトコル。例:'http'または'https'$altConfig (
\Config\App
) – 使用する代替構成
- 戻り値:
サイトURL
- 戻り値の型:
string
注意
v4.3.0以降、
Config\App::$allowedHostnames
を設定した場合、現在のURLが一致する場合、これにはホスト名が設定されたURLが返されます。構成ファイルで指定されているサイトURLを返します。index.phpファイル(または構成ファイルでサイトの
Config\App::$indexPage
として設定したもの)がURLに追加され、関数に渡すURIセグメントも追加されます。URLが変更された場合にページがよりポータブルになるように、ローカルURLを生成する必要がある場合は、常にこの関数を使用することをお勧めします。
セグメントは、オプションで文字列または配列として関数に渡すことができます。以下は文字列の例です。
<?php echo site_url('news/local/123');
上記の例では、http://example.com/index.php/news/local/123 のようなものが返されます。
以下は、配列として渡されたセグメントの例です。
<?php $segments = ['news', 'local', '123']; echo site_url($segments);
異なる構成設定を含む、自分のサイトとは異なるサイトのURLを生成する場合、代替構成が役立つ場合があります。 これは、フレームワーク自体の単体テストに使用します。
- base_url([$uri = ''[, $protocol = null]])
- パラメータ:
$uri (
array|string
) – URI文字列またはURIセグメントの配列$protocol (
string
) – プロトコル。例:'http'または'https'
- 戻り値:
ベースURL
- 戻り値の型:
string
注意
v4.3.0以降、
Config\App::$allowedHostnames
を設定した場合、現在のURLが一致する場合、これにはホスト名が設定されたURLが返されます。注意
以前のバージョンでは、引数なしで呼び出された場合、末尾のスラッシュ(
/
)なしでベースURLが返されていました。バグが修正され、v4.3.2以降では末尾のスラッシュ付きのベースURLが返されます。構成ファイルで指定されているサイトベースURLを返します。例
<?php echo base_url();
この関数は、
site_url()
と同じものを返しますが、Config\App::$indexPage
が追加されません。site_url()
と同様に、セグメントを文字列または配列として指定できます。以下は文字列の例です。<?php echo base_url('blog/post/123');
上記の例では、http://example.com/blog/post/123 のようなものが返されます。
これは、
site_url()
とは異なり、画像やスタイルシートなどのファイルに文字列を指定できるため便利です。たとえば<?php echo base_url('images/icons/edit.png');
これは、http://example.com/images/icons/edit.png のようなものを返します。
- current_url([$returnObject = false[, $request = null]])
- パラメータ:
$returnObject (
boolean
) – 文字列ではなくURIインスタンスを返す場合はtrue。$request (
IncomingRequest|null
) – パス検出に使用する代替リクエスト。テストに役立ちます。
- 戻り値:
現在のURL
- 戻り値の型:
string|\CodeIgniter\HTTP\URI
現在表示されているページの完全なURLを返します。文字列を返す場合、URLのクエリ部分とフラグメント部分が削除されます。URIを返す場合、クエリ部分とフラグメント部分が保持されます。
ただし、セキュリティ上の理由から、
Config\App
設定に基づいて作成されており、ブラウザのURLと一致することを意図していません。v4.3.0以降、
Config\App::$allowedHostnames
を設定した場合、現在のURLが一致する場合、これにはホスト名が設定されたURLが返されます。注意
current_url()
を呼び出すことは、これを行うのと同じです。site_url(uri_string());
重要
v4.1.2より前は、この関数には
Config\App::$indexPage
の設定を無視するバグがありました。
- previous_url([$returnObject = false])
- パラメータ:
$returnObject (
boolean
) – 文字列の代わりにURIインスタンスを返す場合はtrue。
- 戻り値:
ユーザーが以前にアクセスしていたURL
- 戻り値の型:
string|mixed|\CodeIgniter\HTTP\URI
ユーザーが以前にアクセスしていたページの完全なURL(セグメントを含む)を返します。
注意
HTTP_REFERER
システム変数を盲目的に信頼することのセキュリティ上の問題のため、CodeIgniterは、利用可能な場合はセッションに以前にアクセスしたページを保存します。 これにより、常に既知の信頼できるソースを使用することが保証されます。 セッションがロードされていない場合、または利用できない場合は、HTTP_REFERER
のサニタイズされたバージョンが使用されます。
- uri_string()
- 戻り値:
URI文字列
- 戻り値の型:
string
現在のURLのパス部分をbaseURLからの相対パスで返します。
例えば、baseURLが http://some-site.com/ で、現在のURLが
http://some-site.com/blog/comments/123
の場合、この関数は以下を返します。
blog/comments/123
baseURLが http://some-site.com/subfolder/ で、現在のURLが
http://some-site.com/subfolder/blog/comments/123
の場合、この関数は以下を返します。
blog/comments/123
注意
以前のバージョンでは、パラメータ
$relative = false
が定義されていました。しかし、バグのため、この関数は常にbaseURLからの相対パスを返していました。v4.3.2以降、このパラメータは削除されました。注意
以前のバージョンでは、baseURLに移動すると、この関数は
/
を返していました。v4.3.2以降、バグが修正され、空の文字列(''
)を返すようになりました。
- index_page([$altConfig = null])
- パラメータ:
$altConfig (
\Config\App
) – 使用する代替構成
- 戻り値:
indexPage
の値- 戻り値の型:
string
設定ファイルで指定されたサイトの indexPage を返します。例:
<?php echo index_page();
site_url()
と同様に、代替設定を指定できます。異なる設定を持つ別のサイトのURLを生成する場合に、代替設定が役立つことがあります。これは、フレームワーク自体のユニットテストに使用されます。
- anchor([$uri = ''[, $title = ''[, $attributes = ''[, $altConfig = null]]]])
- パラメータ:
$uri (
mixed
) – URI文字列またはURIセグメントの配列$title (
string
) – アンカータイトル$attributes (
mixed
) – HTML属性$altConfig (
\Config\App
) – 使用する代替構成
- 戻り値:
HTMLハイパーリンク(アンカータグ)
- 戻り値の型:
string
ローカルサイトのURLに基づいて、標準のHTMLアンカーリンクを作成します。
最初のパラメータには、URLに追加したい任意のセグメントを含めることができます。上記の
site_url()
関数と同様に、セグメントは文字列または配列にすることができます。注意
アプリケーション内部へのリンクを作成する場合は、ベースURL(
http://...
)を含めないでください。これは、設定ファイルで指定された情報から自動的に追加されます。URLに追加したいURIセグメントのみを含めてください。2番目のセグメントは、リンクに表示させたいテキストです。空白のままにした場合、URLが使用されます。
3番目のパラメータには、リンクに追加したい属性のリストを含めることができます。属性は、単純な文字列または連想配列にすることができます。
以下に例をいくつか示します。
<?php echo anchor('news/local/123', 'My News', 'title="News title"'); // Prints: <a href="http://example.com/index.php/news/local/123" title="News title">My News</a> echo anchor('news/local/123', 'My News', ['title' => 'The best news!']); // Prints: <a href="http://example.com/index.php/news/local/123" title="The best news!">My News</a> echo anchor('', 'Click here'); // Prints: <a href="http://example.com/index.php">Click here</a>
上記と同様に、代替設定を指定できます。異なる設定を持つ別のサイトのリンクを生成する場合に、代替設定が役立つことがあります。これは、フレームワーク自体のユニットテストに使用されます。
注意
アンカー関数に渡された属性は、XSS攻撃から保護するために自動的にエスケープされます。
- anchor_popup([$uri = ''[, $title = ''[, $attributes = false[, $altConfig = null]]]])
- パラメータ:
$uri (
string
) – URI文字列$title (
string
) – アンカータイトル$attributes (
mixed
) – HTML属性$altConfig (
\Config\App
) – 使用する代替構成
- 戻り値:
ポップアップハイパーリンク
- 戻り値の型:
string
anchor()
関数とほぼ同じですが、URLを新しいウィンドウで開きます。3番目のパラメータでJavaScriptのウィンドウ属性を指定して、ウィンドウの開き方を制御できます。3番目のパラメータが設定されていない場合、ブラウザの設定で新しいウィンドウが開きます。属性の例を以下に示します。
<?php $atts = [ 'width' => 800, 'height' => 600, 'scrollbars' => 'yes', 'status' => 'yes', 'resizable' => 'yes', 'screenx' => 0, 'screeny' => 0, 'window_name' => '_blank', ]; echo anchor_popup('news/local/123', 'Click Me!', $atts);
上記と同様に、代替設定を指定できます。異なる設定を持つ別のサイトのリンクを生成する場合に、代替設定が役立つことがあります。これは、フレームワーク自体のユニットテストに使用されます。
注意
上記の属性は関数のデフォルトであるため、必要なものと異なるもののみを設定する必要があります。関数にすべてのデフォルトを使用させるには、3番目のパラメータに空の配列を渡します。
<?php echo anchor_popup('news/local/123', 'Click Me!', []);
注意
window_name は実際には属性ではなく、JavaScriptのwindow.open()メソッドへの引数であり、ウィンドウ名またはウィンドウターゲットを受け付けます。
注意
上記以外の属性は、アンカータグのHTML属性として解析されます。
注意
anchor_popup関数に渡された属性は、XSS攻撃から保護するために自動的にエスケープされます。
- mailto($email[, $title = ''[, $attributes = '']])
- パラメータ:
$email (
string
) – Eメールアドレス$title (
string
) – アンカータイトル$attributes (
mixed
) – HTML属性
- 戻り値:
「mailto」ハイパーリンク
- 戻り値の型:
string
標準のHTMLメールリンクを作成します。使用例:
<?php echo mailto('[email protected]', 'Click Here to Contact Me');
上記の
anchor()
タブと同様に、3番目のパラメータを使用して属性を設定できます。<?php $attributes = ['title' => 'Mail me']; echo mailto('[email protected]', 'Contact Me', $attributes);
注意
mailto関数に渡された属性は、XSS攻撃から保護するために自動的にエスケープされます。
- safe_mailto($email[, $title = ''[, $attributes = '']])
- パラメータ:
$email (
string
) – Eメールアドレス$title (
string
) – アンカータイトル$attributes (
mixed
) – HTML属性
- 戻り値:
スパム対策の「mailto」ハイパーリンク
- 戻り値の型:
string
mailto()
関数と同じですが、スパムボットによるメールアドレスの収集を防ぐために、JavaScriptで記述された序数を使用してmailtoタグの難読化バージョンを書き込みます。
- auto_link($str[, $type = 'both'[, $popup = false]])
- パラメータ:
$str (
string
) – 入力文字列$type (
string
) – リンクタイプ ('email', 'url' または 'both')$popup (
bool
) – ポップアップリンクを作成するかどうか
- 戻り値:
リンク化された文字列
- 戻り値の型:
string
文字列に含まれるURLとメールアドレスを自動的にリンクに変換します。例:
<?php $string = auto_link($string);
2番目のパラメータは、URLとメールアドレスの両方を変換するか、どちらか一方のみを変換するかを決定します。パラメータが指定されていない場合、デフォルトの動作は両方です。メールリンクは、上記のように
safe_mailto()
としてエンコードされます。URLのみを変換します。
<?php $string = auto_link($string, 'url');
メールアドレスのみを変換します。
<?php $string = auto_link($string, 'email');
3番目のパラメータは、リンクを新しいウィンドウで表示するかどうかを決定します。値はtrueまたはfalse(ブール値)にすることができます。
<?php $string = auto_link($string, 'both', true);
注意
認識されるURLは、
www.
または://
で始まるもののみです。
- url_title($str[, $separator = '-'[, $lowercase = false]])
- パラメータ:
$str (
string
) – 入力文字列$separator (
string
) – 単語区切り文字(通常は'-'
または'_'
)$lowercase (
bool
) – 出力文字列を小文字に変換するかどうか
- 戻り値:
URL形式の文字列
- 戻り値の型:
string
文字列を入力として受け取り、人間が理解しやすいURL文字列を作成します。たとえば、ブログで記事のタイトルをURLに使用したい場合に役立ちます。例:
<?php $title = "What's wrong with CSS?"; $url_title = url_title($title); // Produces: Whats-wrong-with-CSS
2番目のパラメータは、単語の区切り文字を決定します。デフォルトではダッシュが使用されます。推奨されるオプションは、
-
(ダッシュ)または_
(アンダースコア)です。例:
<?php $title = "What's wrong with CSS?"; $url_title = url_title($title, '_'); // Produces: Whats_wrong_with_CSS
3番目のパラメータは、小文字を強制するかどうかを決定します。デフォルトでは強制されません。オプションは、ブール値true/falseです。
例:
<?php $title = "What's wrong with CSS?"; $url_title = url_title($title, '-', true); // Produces: whats-wrong-with-css
- mb_url_title($str[, $separator = '-'[, $lowercase = false]])
- パラメータ:
$str (
string
) – 入力文字列$separator (
string
) – 単語区切り文字(通常は'-'
または'_'
)$lowercase (
bool
) – 出力文字列を小文字に変換するかどうか
- 戻り値:
URL形式の文字列
- 戻り値の型:
string
この関数は、
url_title()
と同じように動作しますが、すべてのアクセント付き文字を自動的に変換します。
- prep_url([$str = ''[, $secure = false]])
- パラメータ:
$str (
string
) – URL文字列$secure (
boolean
) –https://
の場合は true
- 戻り値:
プロトコル接頭辞付きURL文字列
- 戻り値の型:
string
この関数は、URLからプロトコル接頭辞が欠落している場合に、
http://
またはhttps://
を追加します。URL文字列を次のように関数に渡します。
<?php $url = prep_url('example.com');
- url_to($controller[, ...$args])
- パラメータ:
$controller (
string
) – ルート名または Controller::method...$args (
mixed
) – ルートに渡される1つ以上のパラメータ。最後のパラメータでロケールを設定できます。
- 戻り値:
絶対URL
- 戻り値の型:
string
注意
この関数は、コントローラ/メソッドが app/Config/routes.php で定義されたルートを持っている必要があります。
アプリ内のコントローラメソッドへの絶対URLを構築します。例:
<?php // The route is defined as: $routes->get('/', 'Home::index'); ?> <a href="<?= url_to('Home::index') ?>">Home</a> <!-- Result: 'http://example.com/' -->
ルートに引数を追加することもできます。例:
<?php // The route is defined as: $routes->get('pages/(:segment)', 'Page::index/$1'); ?> <a href="<?= url_to('Page::index', 'home') ?>">Home</a> <!-- Result: 'http://example.com/pages/home' -->
これは、ビューにリンクを配置した後でもルートを変更できるため便利です。
v4.3.0以降、ルートで
{locale}
を使用する場合、オプションでロケール値を最後のパラメータとして指定できます。<?php // The route is defined as: $routes->add( '{locale}/users/(:num)/gallery/(:num)', 'Galleries::showUserGallery/$1/$2', ['as' => 'user_gallery'] ); ?> <a href="<?= url_to('user_gallery', 15, 12, 'en') ?>">View Gallery</a> <!-- Result: 'http://example.com/en/users/15/gallery/12' -->
詳細については、リバースルーティングおよび名前付きルートの使用を参照してください。
- url_is($path)
- パラメータ:
$path (
string
) – 現在のURIパスと照合する、baseURLに対する相対URLパス。
- 戻り値の型:
boolean
現在のURLのパスと指定されたパスを比較して、一致するかどうかを確認します。例:
<?php if (url_is('admin')) { // ... }
これは http://example.com/admin に一致します。baseURLが
http://example.com/subdir/
の場合、http://example.com/subdir/admin に一致します。URL内の他の該当する文字に一致させるために、
*
ワイルドカードを使用できます。<?php if (url_is('admin*')) { // ... }
これは次のいずれにも一致します。
/admin
/admin/
/admin/users
/admin/users/schools/classmates/…