プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
FuelPHP1.6、Html::anchor()を理解する
FuelPHPでリンクを作成するときに使用する「Html::anchor()」を
ちょいと見ていこうかな、というのが今回のテーマです。

まずは普通の使い方。
第一引数に呼び出す「クラス名/アクション名」を指定して
第二引数でアンカーテキストを指定するらしいφ(--)

<?php echo Html::anchor("hoge/hoge/", "クラス名/アクション名/"); ?>

結果φ(--)

<a href="http://localhost/fuelphp-1.6/public/hoge/hoge/">クラス名/アクション名/</a>

まぁ普通ですね。

コントローラじゃなくて普通にURLを指定するとどうなる?φ(--)

<?php echo Html::anchor("http://wa3.i-3-i.info", "わわわIT用語辞典"); ?>

結果φ(--)

<a href="http://wa3.i-3-i.info">わわわIT用語辞典</a>

おっ、余計なことしないで普通にリンクになった。

第二引数を省略するとどうなる?φ(--)

<?php echo Html::anchor("hoge/hoge/"); ?>

結果φ(--)

<a href="http://localhost/fuelphp-1.6/public/hoge/hoge/">http://localhost/fuelphp-1.6/public/hoge/hoge/</a>

なるほど。URLがテキストになるのですね。

ターゲットとかIDとかは第三引数で指定すれば良いらしいφ(--)

<?php echo Html::anchor("hoge/hoge/", "クラス名/アクション名/",array('id' => "id1", "target" => "_blank")); ?>

結果φ(--)

<a id="id1" target="_blank" href="http://localhost/fuelphp-1.6/public/hoge/hoge/">クラス名/アクション名/</a>

おぉ、ばっちり。

アンカーテキストはHTMLタグが有効らしいφ(--)

<?php echo Html::anchor("hoge/hoge/", "クラス名/<br>アクション名/",array()); ?>

結果φ(--)

<a href="http://localhost/fuelphp-1.6/public/hoge/hoge/">クラス名/<br>アクション名/</a>
※画面表示上は「クラス名/」「アクション名/」で2行になって表示されます。

自分でサニタイズしろってことですな。動的にリンクを作成する際は注意が必要そうです。

第4引数にtrueを設定するとhttpsになるらしいφ(--)

<?php echo Html::anchor("hoge/hoge/", "クラス名/アクション名/",array(),true); ?>

結果φ(--)

<a href="https://localhost/fuelphp-1.6/public/hoge/hoge/">クラス名/アクション名/</a>

ホントだ。httpsになった。

使い方はこんな感じですね。

せっかくだから中身も見ておきましょうか。

fuel/core/classes/html.php

に書いてあるようです。
中身はこんな感じφ(--)

■fuel/core/classes/html.php
public static function anchor($href, $text = null, $attr = array(), $secure = null)
{
    if ( ! preg_match('#^(\w+://|javascript:|\#)# i', $href))
    {
        $urlparts = explode('?', $href, 2);
        $href = \Uri::create($urlparts[0], array(), isset($urlparts[1])?$urlparts[1]:array(), $secure);
    }
    elseif ( ! preg_match('#^(javascript:|\#)# i', $href) and is_bool($secure))
    {
        $href = http_build_url($href, array('scheme' => $secure ? 'https' : 'http'));

        // Trim the trailing slash
        $href = rtrim($href, '/');
    }

    // Create and display a URL hyperlink
    is_null($text) and $text = $href;

    $attr['href'] = $href;

    return html_tag('a', $attr, $text);
}

なるほど。
$hrefが特定の書式にマッチしない場合のみURLを整形しているのですね。
だから「http://wa3.i-3-i.info」を設定したときはそのまま出力されたのか。

正規表現の中身は解説するのが面倒なので省略します。

……(--)

「おまえ、実は正規表現よく分かってないんだろ」と思われると悔しいので

'#^(\w+://|javascript:|\#)# i'

のところだけ解説しておきますね。

大文字小文字を区別しないで「~://」「javascript:」「#」のいずれかで始まる

です。
一番目がURLの指定、2番目がJavaScriptの記述、3番目がページ内ジャンプですね。
これらの指定時は余計な整形をしないでそのまま出力してくれるようです。

そのためこんな感じの相対パス指定をするとφ(--)

<?php echo Html::anchor("./index.html", "ほげほげ"); ?>

こんな感じの結果になってしまいますφ(--)

<a href="http://localhost/fuelphp-1.6/public/./index.html">ほげほげ</a>

よっしゃ、理解した。完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:FuelPHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事