例えば
例えば、chat_messages
テーブルのbody
カラムにテキスト文が入っていたとする
id | body |
1 | こんにちは! 下記リンクをご確認ください。 https://zakkuri.life |
これをそのまま表示すると・・
ここで、リンク部分を自動で<a>タグに置き換えてあげるとユーザービリティが高まる
モデルに文字列にリンクを埋め込む処理を行うgetアクセサを追加する
ChatMessage
モデルにgetBodyWithLinkAttribute()
メソッドを追加
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ChatMessage extends Model
{
use HasFactory;
/**
* 文字列のリンク部分に<a>タグを埋め込むよ
*
* @return string
*/
public function getBodyWithLinkAttribute(): string
{
$pattern = '/((?:https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+)/';
$replace = '<a href="$1">$1</a>';
return preg_replace($pattern, $replace, $this->body);
}
}
Laravelのgetアクセサ
LaravelのモデルでgetXXXAttribute()
といったメソッドを追加すると、
そこでreturnした値がModel変数で使用できるようになる
- モデルのメソッド名はキャメルケースで記載
(例)getFullNameAttribute()
- 使用する場合は、get〜Attributeの間の文字列をスネークケースで記載
(例)$model->full_name
Viewで、getアクセサで設定した値を使用する
<div>{!! nl2br($message->body_with_link) !!}</div>
いけた
文字が続いている場合でも大丈夫
Laravelでテキストのリンク部分に自動で<a>タグを入れるメモ
チャットメッセージやブログ投稿表示などに用いると便利