在Laravel刀片模板中截断字符串

fl3*_*3x7 68 php template-engine laravel blade

Laravel中的刀片模板是否有截断修改器,非常像Smarty?

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

所以例如我正在寻找类似的东西:

{{ $myVariable|truncate:"10":"..." }}
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过作曲家使用像Twig这样的东西,但我希望Laravel本身具有内置功能.

如果没有,可以创建自己的可重用修改器,如Smarty提供.我喜欢Blade不会过度使用所有语法的事实,但我认为truncate是一个非常方便的函数.

我正在使用Laravel 4.

Ani*_*ngh 160

在Laravel 4和5中,您可以使用str_limit,它限制字符串中的字符数.

{{ str_limit($string, $limit = 150, $end = '...') }}
Run Code Online (Sandbox Code Playgroud)

有关更多Laravel帮助函数http://laravel.com/docs/helpers#strings

  • 在5.8版中,删除了`str`帮助器,而必须使用`Illuminate \ Support \ Str :: limit($ string)`。 (4认同)

Dus*_*ham 38

Laravel 4 Str::limit将截断到确切的字符数,并且Str::words还将截断字边界.

查看:


Lau*_*nce 30

编辑:这个答案是在Laravel 4 beta期间发布的,当时Str类不存在.现在有更好的方法在Laravel 4中完成 - 这是Dustin的答案如下.由于SO规则我不能删除这个答案(它不会让我)

刀片本身没有这种功能.

在Laravel 3中有Str类 - 你可以做到:

{{ Str::limit($myVariable, 10) }}
Run Code Online (Sandbox Code Playgroud)

在这个阶段,我不相信Str类在Laravel 4中 - 但是这里有一个端口,你可以将它包含在作曲家中以添加到你自己的项目中


Vip*_*pro 17

Laravel 7.* 更新Fluent Strings,即一个更流畅、面向对象的接口,用于处理字符串值,与传统字符串操作相比,允许您使用更易读的语法将多个字符串操作链接在一起。

限制示例:

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

输出

The quick brown fox...
Run Code Online (Sandbox Code Playgroud)

单词示例:

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

输出

Perfectly balanced, as >>>
Run Code Online (Sandbox Code Playgroud)

Laravel 6.* 更新:您需要此包才能运行所有 Laravel 助手composer require laravel/helpers

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

use Illuminate\Support\Str;
Run Code Online (Sandbox Code Playgroud)

Laravel 5.8 更新

这是用于处理字符串中的字符

{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}
Run Code Online (Sandbox Code Playgroud)

输出

Lorem ipsu ... 
Run Code Online (Sandbox Code Playgroud)

这是用于处理字符串中的单词

{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}
Run Code Online (Sandbox Code Playgroud)

输出

Lorem ipsum ... 
Run Code Online (Sandbox Code Playgroud)

这是处理字符串Laravel Helpers的最新帮助文档


小智 7

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

那么在你看来:

{{ $comment->short_description }}
Run Code Online (Sandbox Code Playgroud)


Ram*_*ker 6

您可以设置命名空间,如:

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