Truncate string in Laravel blade templates

在 Laravel,刀片模板有一个截断修饰符吗?

我知道我可以只在模板中写出实际的 PHP,但我正在寻找一些更好的东西来编写(让我们不要进入整个 PHP 是一个模板引擎的争论)。

例如,我在寻找这样的东西:

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

我知道我可以使用类似作曲家 Twig 的东西,但我希望在 Laravel 本身内置的功能。

如果不能,则可以像 Smarty 提供的那样创建自己的可重用修饰符。我喜欢这样一个事实: Blade 没有对所有的语法进行过度修改,但是我认为拥有 truncate 是一个非常方便的函数。

我用的是 Laravel 4。

211747 次浏览

编辑: 这个答案是在 Laravel4测试版发布的,当时 Str 类还不存在。现在在 Laravel4中有一个更好的方法——这是达斯汀在下面的回答。我不能删除这个答案,由于 SO 规则(它不会让我)

Blade 本身没有这种功能。

在 Laravel 3中有一个 Str 类,你可以这样做:

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

在这个阶段,我不相信 Str 类是在 Laravel4-but here is a port of it that you can include in composer添加到您自己的项目

Laravel 4具有 Str::limit,它将截断到确切的字符数,还有 Str::words,它将截断到单词边界。

Check out:

在 Laravel 4 & 5(最多5.7)中,您可以使用 str_limit,它限制字符串中的字符数。

在 Laravel 5.8 up 中,您可以使用 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

可以设置如下命名空间:

{!! \Illuminate\Support\Str::words($item->description, 10,'....')  !!}

这在 Laravel 5上有效:

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

您可以设置字符串限制,如下例所示:

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

它只显示20个字母,包括空格和以... 结尾的字母。

示例图像It shows the example of string limit

为了保持代码的干燥,如果内容来自模型,则应该采用略有不同的方法。像这样编辑你的模型(在 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, '...');
}
}
?>

Then in your view :

\{\{ $comment->short_description }}

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 helpers composer require laravel/helpers

对于在控制器中使用 helper,不要忘记也包含/使用 class

use Illuminate\Support\Str;

Laravel 5.8升级版

这是用来处理 字符串中的字符的:

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

输出

Lorem ipsu ...

这是用来处理 words from the string的:

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

输出

Lorem ipsum ...

Here is the latest helper documentation for handling string Laravel 助手

对于类似这样的简单事情,我更喜欢使用助手——例如:

在您的 /app/helpers.php中创建一个包含以下内容的 helpers.php文件:

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

composer.json中自动加载时注册 helper.php

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

After that you can use in your blade file for example:

\{\{ short_string($whatever_as_text) }}

然后,您可以在应用程序中全局使用这个简单的函数。

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>

在 Laravel 4 & 5(最多5.7)中,可以使用 str _ limit,它限制字符串中的字符数。

在 Laravel7 up 中,您可以使用 Str: : limit helper。

//For Laravel  to Laravel 7


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

可以使用 sub _ str:

\{\{substr($myVariable,10)}}

下面的例子,使用幼虫8。

{!! Str::words("$post->content", 8, ' ...') !!}

{!! Str::limit("$post->content", 15, ' ...') !!}

Words 方法限制字符串中的单词数。另一个字符串可以通过它的第三个参数传递给这个方法,以指定哪个字符串应该附加到截断的字符串的末尾:

use Illuminate\Support\Str;


return Str::words('Perfectly balanced, as all things should be.', 3, ' >>>');


// Perfectly balanced, as >>>

您可以向该方法传递第三个参数,以更改将追加到截断字符串末尾的字符串:

use Illuminate\Support\Str;


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


// The quick brown fox (...)

You can use the Laravel Blade directive like this.

Str::limit('$yourString',numberOfElement).

例如,Str: : limit (‘ Test’,3)将向您显示 Tes..。