質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

772閲覧

link_toで条件に応じたCSS付与

sakura_hana

総合スコア11425

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2017/10/23 08:10

編集2017/10/23 08:11

Laravel 5.4 に触れ始めたばかりの初心者です。

以下のコードでリンクをボタン形式で表示出来ますが、これを
「$tag->name が 'aaa' の時は 'btn-primary' に、それ以外の時は 'btn-default' に」
と条件に応じて違ったCSSを適用させたいです。

PHP

1<div> 2 @foreach($tags as $tag) 3 {!! link_to('tag/'.$tag->id, $tag->name, ['class' => 'btn btn-primary']) !!} 4 @endforeach 5</div>

通常の条件分岐なら「@if($hoge) @endif」で出来ますが、link_toの中でどう使うのか分かりません。
link_toごと囲めば出来ますが冗長な気がするので、違う部分だけ分岐可能なのかな?と思い質問させて頂きました。
初歩的な内容かもしれませんが宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

あまり見通しの良い書き方ではありませんがlink_toの中で処理を行うのであれば、三項演算子を使うことでView中で目的の分岐を行うことが可能です。

{!! link_to('tag/'.$tag->id, $tag->name, ['class' => 'btn '.($tag->name === "aaa"? "btn-primary" : "btn-default")]) !!}

Viewの中でPHPのロジックを書きすぎると保守性が悪くなるので、Laravelに慣れてきた際にコントローラからViewに渡す変数の段階で調整すると良いかと思います。

投稿2017/10/23 11:11

編集2017/10/23 11:14
aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2017/10/23 11:43

回答ありがとうございます。こちらを使用させて頂きます。 >コントローラからViewに渡す変数の段階で調整 実際の用途としては「沢山あるボタンの内、現在開いているページに該当するボタンは色を変える」という動きを想定しています。 質問では'aaa'としましたが実際は変数にしようと思っています。調整とはそのようなことでいいのでしょうか? それともコントローラー側で付与するクラスを指定しておいて、Viewではそれを参照するだけにすべきなのでしょうか?
aro10

2017/10/23 14:57 編集

一例として、classは複数の場合は半角スペース区切りになるので、必要なクラス値を配列で準備してimplodeして結合などをして渡してあげると少し取扱はしやすいかと思います。 ``` $btnClass = ["btn"]; $btnClass[] = ($tag->name === "aaa")? "btn-primary" : "btn-default"; view("test")->with(["btnClass"=>implode(" ",$btnClass)]) ``` コントローラで値を渡す他に、Laravelのビューコンポーザを使うと場合によってはコントローラがすっきりします。 [Laravel 5.5 ビュー](https://readouble.com/laravel/5.5/ja/views.html) また、Webアプリ等でSEO等あまり気にしないのであれば、Vue.jsを使うと、BladeのHTMLを文字列で取扱よりも動的な変更は行いやすいです。 LaravelはLaravel Mixで簡単にVue.jsを導入できるようになっています。 [Laravel 5.5 アセットのコンパイル(Laravel Mix)](https://readouble.com/laravel/5.5/ja/mix.html) [Laravel 5.4 と Vue.js 2.2 と JWTAuth で、ログインできる SPA アプリケーションのチュートリアル 1/4](https://qiita.com/acro5piano/items/908cd751b2ea97e19be1)
sakura_hana

2017/10/24 02:10

なるほど、とても参考になります。少しずつ勉強していこうと思います。 様々な情報ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問