Laravelブレードテンプレートの文字列を切り捨てます


92

Smartyのように、Laravelのブレードテンプレートに切り捨て修飾子はありますか?

テンプレートに実際のphpを書き出すことができることはわかっていますが、もう少し書きやすいものを探しています(PHP全体に触れないようにしましょう。テンプレートエンジンの議論です)。

たとえば、次のようなものを探しています。

{{ $myVariable|truncate:"10":"..." }}

Composerを介してTwigのようなものを使用できることは知っていますが、Laravel自体に組み込まれた機能を望んでいます。

そうでない場合は、Smartyが提供するような独自の再利用可能な修飾子を作成することが可能です。Bladeがすべての構文で過剰になるわけではないという事実は気に入っていますが、truncateは非常に便利な関数だと思います。

Laravel4を使用しています。


Laravel 5はどうですか?
Hos Mercury

1
@HosMercury L5については、stackoverflow.com
questions / 29281013 /を

回答:


198

Laravel 4&5(5.7まで)ではstr_limit、文字列の文字数を制限するを使用できます。

Laravel 5.8以降では、Str::limitヘルパーを使用できます。

//For Laravel 4 to Laravel 5.5
{{ str_limit($string, $limit = 150, $end = '...') }}
//For Laravel 5.5 upwards
{{ \Illuminate\Support\Str::limit($string, 150, $end='...') }}

Laravelヘルパー関数の詳細についてはhttp://laravel.com/docs/helpers#strings


ユースケースはブレードビューにあるため、正解です。
フリスベタリアン2016年

10
バージョン5.8のstrヘルパーが削除されたため、Illuminate\Support\Str::limit($string)代わりに使用する必要があります
HassanAzimi19年

1
str_limitが廃止されました
オマール

39

Laravel 4にはStr::limit、正確な文字数にStr::words切り捨てられるものと、単語の境界で切り捨てられるものがあります。

チェックアウト:


Str::wordsLarvel 5.2に同等のものが存在するかどうか知っていますか?
Jiedara 2016

1
いいえ。文字ではなく、単語数が制限されているようです。github.com/laravel/framework/blob/5.2/src/Illuminate/Support/…–
Dustin Graham

それが私が探していたものでした!どうも !
Jiedara 2016

32

編集:この回答は、Strクラスが存在しなかったLaravel4ベータ中に投稿されました。Laravel4でそれを行うためのより良い方法があります-これは以下のダスティンの答えです。SOルールのため、この回答を削除できません(許可されません)

ブレード自体にはその機能はありません。

Laravel 3にはStrクラスがありました-これはあなたができることです:

{{ Str::limit($myVariable, 10) }}

この段階では、StrクラスがLaravel 4にあるとは思いませんが、これをコンポーザー含めて独自のプロジェクトに追加できるポートを次に示します。


提案をありがとう、私は洞窟に入って明道ポートを使わなければならないようですlol
fl3x7 2013

現在、Laravel4にはStrクラスがあります。ダスティン・グラハムの回答を参照してください。
trm42 2013

はい-その通りです。私が最初にこの回答を投稿したのは、Strクラスが存在しなかったLaravel 4 Betaの期間でした
Laurence

元の答えはどこにありますか?4.1のドキュメントを今すぐ見つけることは不可能です... :(
Srneczek 2016

15

Laravel 7のアップデート*Fluent Stringsつまり、文字列値を操作するためのより流暢でオブジェクト指向のインターフェイス。従来の文字列操作と比較して、より読みやすい構文を使用して複数の文字列操作をチェーンできます。

制限例:

$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);

出力

The quick brown fox...

単語例:

$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');

出力

Perfectly balanced, as >>>

Laravel 6のアップデート*:すべてのlaravelヘルパーを機能させるにはこのパッケージが必要ですcomposer require laravel/helpers

コントローラでヘルパーを使用する場合は、クラスも含める/使用することを忘れないでください

use Illuminate\Support\Str;

Laravel5.8アップデート

これは文字列からの文字を処理するためのものです:

{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}

出力

Lorem ipsu ... 

これは文字列からの単語を処理するためのものです:

{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}

出力

Lorem ipsum ... 

文字列Laravelヘルパーを処理するための最新のヘルパードキュメントは次のとおりです


1
非常にきれいなソリューション。私のために働いた。IMO最高の答え
maximus1127

@ maximus1127学習に向けて努力していただき、ありがとうございます。お役に立ててうれしいです。
Vipertecpro

1
すごい!答えの種類もっと見たいです。
mhrabiee

Lorem ipsumのdolorのような文字列があるとどうなりますか?正しい結果が返されますか?
リシ

@Rishiはい、正しい結果が返されますが、制限について話しているのはどのメソッドですか?または言葉?
Vipertecpro


5

コードをDRYに保ち、コンテンツがモデルからのものである場合は、少し異なるアプローチを採用する必要があります。そのようにモデルを編集します(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 }}

2

これはLaravel5で動作します:

{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}

2

以下の例のように文字列制限を設定できます。

<td>{{str_limit($biodata ->description, $limit = 20, $end = '...')}}</td>

空白を含む20文字のみが表示され、...で終わります。

画像の例文字列制限の例を示します


ねえ、ブラザー、それは非推奨ですあなたの答えを更新してください
Mahdi Safari

1

このような単純なものについては、ヘルパーを作成したいと思います-例:

次の内容でhelpers.phpファイルを作成します/app/helpers.php

<?php
if (! function_exists('short_string')) {
    function short_string($str) {
            $rest = substr($str, 0, 10);
            return $rest;
    }
}

helper.phpオートロードで登録しますcomposer.json

   "autoload": {
        "files": [
            "app/helpers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    }

その後、ブレードファイルで次のように使用できます。

{{ short_string($whatever_as_text) }}

この単純な関数をアプリでグローバルに使用できます。


0

Laravel 6アップデート:

@php
$value = 'Artificial Intelligence';
$var = Str::limit($value, $limit = 15, $end = '');
print_r($var);
@endphp

<p class="card-text">{{ Illuminate\Support\Str::limit($value, 7) }}</p>
<h2 class="main-head">{!! Str::limit($value, 5) !!}</h2>

0

Laravel 4および5(5.7まで)では、文字列の文字数を制限するstr_limitを使用できます。

Laravel 7以降では、Str :: limitヘルパーを使用できます。

//For Laravel  to Laravel 7

{{ Illuminate\Support\Str::limit($post->title, 20, $end='...') }}

Laravel 7、使用のみ{{筋力::限界($ chamado-> subClient->名、10)}}
ジョアン・メロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.