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タグの難読化バージョンを書き込みます。

パラメータ:
  • $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/…