2022/05/09
ビュー(Blade)の作成で @foreach を使って DB のレコードを出力する機会はよくあると思います。
「ここのカラムは少し整形してから出力したいな」というケースも出てくるでしょう。
そんな時、あなたはどうしていますか?
ビューに直接ロジック(PHP)を書いたりしていませんか?
コントローラに書く人は△ですね。
ロジックはなるべくモデルに書いていきましょう。
今回はロジックをモデルに書くケースをエントリーいたします。
INDEX
サムネイル画像があるかないかの判定処理
@foreach を使ってループ出力するときに、サムネイル画像があるかないかの判定をする処理です。
画像のアップロードに関しては以下のページをご参照ください。
View(Blade)
:
{{-- ↓↓↓ ループ ↓↓↓ --}}
@foreach($users as $user)
<tr>
<td><a href="/other_detail">{{ $user->id }}</a></td>
<td class="text-nowrap">{{ $user->name }}</td>
<td class="text-nowrap">{{ $user->email }}</td>
<td class="text-nowrap">{{ $user->thumb_exists() }}</td>
</tr>
@endforeach
{{-- ↑↑↑ ループ ↑↑↑--}}
:
Model(User.php)
class User extends Model
{
:
/*
* サムネイル画像の存在判定
*/
public function thumb_exists()
{
$thumb_file = $_SERVER['DOCUMENT_ROOT'].'/pdf/'.$this->id.'/thumb.jpeg';
if(file_exists($thumb_file)){
echo "<a href='/thumb/".$this->id."/thumb.jpeg' target='_blank'>[ 画像 ]</a>";
}else{
echo "[ 画像 ]";
}
}
}
文字数制限&超過分を「…」に置き換える
長いタイトルやコメントなどを出力するときに文字数制限をかけて超過分を「…」に置き換える処理です。
下の例ではコメント($user->comment)に対して文字数制限をかけるロジックを書いています。
View(Blade)
:
{{-- ↓↓↓ ループ ↓↓↓ --}}
@foreach($users as $user)
<tr>
<td><a href="/other_detail">{{ $user->id }}</a></td>
<td class="text-nowrap">{{ $user->name }}</td>
<td class="text-nowrap">{{ $user->email }}</td>
<td class="text-nowrap">{{ $user->str_limit() }}</td>
</tr>
@endforeach
{{-- ↑↑↑ ループ ↑↑↑--}}
:
Model(User.php)
class User extends Model
{
:
/*
* 文字数制限
*/
public function str_limit()
{
if(mb_strlen($this->comment)>10){
$string = mb_substr($this->comment,0,10);
echo $string . '...';
}else{
echo $this->comment;
}
}
}
このような感じで、なるべくロジックはモデルに書くようにしましょう。
ビューに書くロジックが必要最低限になり、すっきりします。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。