こんにちは、Webプログラマの篠田です。
今回は、PHPフレームワーク「Laravel 5.6」と「Twig」を使ったプログラムで、
Twig内で現在URLの値を取得する方法をご紹介します。
どういうときに「現在のURL」が必要になるか
「現在のURL」が必要になる場面としては、表示しているページのメニューをアクティブ表示したいときではないでしょうか。
そういったときに、コントローラー側のPHPで「現在のURL」を取得して、テンプレート側に送るという仕組みは、全コントローラーに影響するので実装は現実的ではありません。
そこで、ページの構成上必要となるメニュー部分のテンプレートで「現在のURL」が取得できれば、全コントローラーに手を加える必要がなくなります。
ベースとなるコードを用意する
ベースとなる簡単なLaravelのコードを用意します。
まずは、簡単なコントローラーを作成
「artisan」コマンドを利用して、「ItemController」と「MemberController」を作成します。
1 2 |
$ php artisan make:controller ItemController $ php artisan make:controller MemberController |
「ItemController」と「MemberController」に「index」メソッドを用意します。
1 2 3 4 5 6 |
class ItemController extends Controller { public function index() { return view('Item.index'); } } |
1 2 3 4 5 6 |
class MemberController extends Controller { public function index() { return view('Member.index'); } } |
読み込むTwigファイルは「views/Item/index.twig」と「views/Member/index.twig」が保存してあるとします。
ルーティングには名前をつけよう
Laravelのルーティングには、別名を付けることができます。
別名をつけることで、URLが変わったり、呼び出しコントローラーが変わっても、呼び出し側に影響が出ないようにすることができます。
1 2 |
Route::get('/item', 'ItemController@index')->name('item.index'); Route::get('/member', 'MemberController@index')->name('member.index'); |
「name」にかかれている「’item.index’」や「’member.index’」が別名になります。
これで、準備が完了です。
現在のURLを取得してみよう
「現在のURL」を取得するコードは下記のようになります。
1 |
{{ url().current() }} |
「url()」は、Laravelの「url関数」を利用しています。
本来は、引数にパス(例:’/item’)を渡すことで、完全なURL(http://から始まるURL)を作成することができます。
このままでは、「現在のURL」を取得しただけで、実際にメニューをアクティブにするためには、条件を作成する必要があります。
Twigの「match」を使って、ページを認識させる
先程、取得した「現在のURL」を利用して、現在のURLがメニューに該当するURLなのかを判定するコードを作っていきましょう。
条件式に利用するのは、Twigの「matches」です。
1 2 3 4 5 |
{% if url().current() matches '{item}' %} 商品ページです。 {% elseif url().current() matches '{member}' %} メンバーページです。 {% endif %} |
先程の「url().current()」を使いその文字列に「'{member}’」を含んでいれば「true」という条件式を作りました。
Twigの「matches」は、正規表現を使い複雑な文字検索を可能にします。
まとめ
「現在のURL」を活用することで、簡単にアクティブページの処理を作成することができます
ただし、「現在のURL」の取得方法は、同じTwigを利用していても、フレームワークの種類によって呼び出し方が変わってきますので、注意が必要です。
現場の業務フローに寄り添ったWebシステムをお求めなら、私たちALAKIにご相談ください。
ALAKIは経営者様が感じている問題点と、実際にWebシステムを利用される現場スタッフ様が直面している課題を、弊社システムエンジニアが丁寧に聞き取り、お客様と共にシステムを作り上げていきます。
業務改善が実現できるWebシステムをお求めの方は、是非ALAKIにご相談ください。