matsudada技術ブログ

日々の雑念と備忘録

Bladeテンプレート上で条件によりURLを切り替える

Bladeテンプレート上で条件によりURLを切り替える

Bladeテンプレート上でControllerから渡した変数によってURLを切り替える時のやり方で少し詰まったので、備忘録として記載

環境

  • Laravel 5.7

現象

ルート名から分岐などなくURLを生成するケースでは、以下の様なコードで生成できる。

<a href="{{ route('your.route.hoge') }}">リンクテキスト</a>

⇒生成されるコード
<a href="http://domain/hoge">リンクテキスト</a>

しかし、変数によって分岐させたいときに以下のコードではうまくいかない。

<a href="
  @if ($state === 1)
      route('your.route.hoge1')
  @elseif ($state === 2)
      route('your.route.hoge2')
  @elseif ($state === 3)
      route('your.route.hoge3')
  @endif
">リンクテキスト</a>

⇒生成されるコード
<a href="route('your.route.hoge1')">リンクテキスト</a>

対応

以下のようなやりかたで生成できた。

<a 
    @if ($state === 1)
        href={{ route('your.route.hoge1') }}
    @elseif ($state === 2)
        href={{ route('your.route.hoge2') }}
    @elseif ($state === 3)
        href={{ route('your.route.hoge3') }}
    @endif
>リンクテキスト</a>

⇒生成されるコード
<a href="http://domain/hoge1">リンクテキスト</a>

しかし、そもそもViewで分岐などをやろうとするのが良くないので、 Controllerでurlを変数に設定してViewからは呼び出すだけにした方が良いと思う。

<a href="{{ $url }}">リンクテキスト</a>