Laravelのブレードテンプレートには、Smartyによく似た切り捨て修飾子がありますか?
テンプレートで実際のphpを書き出すことができることは知っていますが、もう少し書きやすいものを探しています(PHPはテンプレートエンジンの議論全体ではありません)。
たとえば、次のようなものを探しています:
{{ $myVariable|truncate:"10":"..." }}
私はTwig経由でcomposerのようなものを使用できることを知っていますが、Laravel自体に組み込まれた機能を期待しています。
そうでない場合は、Smartyが提供するような独自の再利用可能な修飾子を作成できます。 Bladeがすべての構文で過剰にならないという事実は好きですが、truncateは本当に便利な機能だと思います。
Laravelを使用しています4。
Laravel 4および5では、str_limit
を使用できます。これは、文字列の文字数を制限します。
{{ str_limit($string, $limit = 150, $end = '...') }}
Laravelヘルパー関数の詳細 http://laravel.com/docs/helpers#strings
Laravel 4には、正確な文字数に切り捨てられるStr::limit
と、Wordの境界で切り捨てられるStr::words
があります。
チェックアウト:
編集:この回答は、Strクラスが存在しなかったLaravel 4ベータ中に投稿されました。 Laravel 4でそれを行うためのより良い方法があります-これは以下のダスティンの答えです。 SOルールが原因でこの回答を削除できません(許可されません)
ブレード自体にはその機能がありません。
Laravel 3にはStrクラスがありました-あなたはそれを行うことができました:
{{ Str::limit($myVariable, 10) }}
この段階では、StrクラスがLaravel 4にあるとは思わない- しかし、ここに作曲家に含めることができるポートがある あなた自身のプロジェクトに追加する
次のように名前空間を設定できます。
{!! \Illuminate\Support\Str::words($item->description, 10,'....') !!}
コードを乾燥した状態に保ち、コンテンツがモデルからのものである場合は、少し異なるアプローチを採用する必要があります。モデルを次のように編集します(L5.8でテスト済み):
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
class Comment extends Model
{
public function getShortDescriptionAttribute()
{
return Str::words($this->description, 10, '...');
}
}
?>
次に、あなたの意見で:
{{ $comment->short_description }}
Laravel 5.8アップデート
{!! Str::limit('Lorem ipsum dolor sit amet, consectetur adipisicing elit', 10, ' ...') !!}
出力
Lorem ipsu ...
これはLaravel 5で機能します:
{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}