LoginSignup
0

More than 5 years have passed since last update.

OctoberCMS ViewBagの変数の有無のチェック方法

Last updated at Posted at 2018-12-05

ViewBagの使用方法に落とし穴があったのでメモ。

やりがちな誤った方法

例えばレイアウトテンプレートで、ある変数が設定されているときだけ、それを使用する、という記述がしたい場合、下記のように書きそうだが、これはNG。

{% if viewBag.canonical_url is not empty %}
    <link rel="canonical" href="{{ viewBag.canonical_url|app }}">
{% endif %}

なぜなら変数、この例では canonical_url は変数が存在しない場合に empty と判定されないからだ。未確認だが、おそらくマジックメソッドとして処理されるためだろう。

ちなみに、is defined でもダメだ。変数が存在しない場合に例外になってしまう。

{% if viewBag.canonical_url is defined %}

また、そもそも viewBag コンポーネントがレイアウトやページに設定されていないと、エラーになる。

正解

下記のように、 viewBag と変数の有無のチェックを empty チェックの前に入れてやれば良い。

{% if viewBag is defined and viewBag.__isset('canonical_url') and viewBag.canonical_url is not empty %}
    <link rel="canonical" href="{{ viewBag.canonical_url|app }}">
{% endif %}

なんともバグが混入しやすそうな仕様だ。早く改善したいもんだ。

StackOverflowにもう少し詳しく書いてあるので参考までに。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0