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


92

Laravel中的刀片模板是否有截短修饰符,就像Smarty一样?

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

因此,例如,我正在寻找类似的东西:

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

我知道我可以通过作曲家使用类似Twig的工具,但我希望Laravel本身具有内置功能。

否则,可以创建自己的可重用修饰符,如Smarty提供的。我喜欢Blade并不能完全消除所有语法的事实,但是我认为truncate是真正有用的功能。

我正在使用Laravel 4。


laravel 5呢?
Hos Mercury

1
@HosMercury对于L5看到stackoverflow.com/questions/29281013/...
fl3x7

Answers:


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


正确答案,因为用例在刀片视图中。
Frisbetarian

10
在5.8版中str,必须删除辅助对象,您必须Illuminate\Support\Str::limit($string)改用
Hassan Azimi

1
不推荐使用str_limit
Omer,

39

Laravel 4具有Str::limit将截断为确切数量的字符,并且Str::words还将截断单词边界的功能。

查看:


您知道Str::words在Larvel 5.2中是否存在等效项?
吉达拉

1
否。它现在限制的是字数,而不是字符数。github.com/laravel/framework/blob/5.2/src/Illuminate/Support/...
达斯汀·格雷厄姆

那就是我想要的!谢谢 !
吉达拉

32

编辑:这个答案是在Laravel 4 beta期间发布的,当时Str类不存在。现在,在Laravel 4中有更好的方法可以做到这一点-这是达斯汀(Dustin)的解答。由于SO规则,我无法删除此答案(不会让我)

刀片本身不具有该功能。

在Laravel 3中有Str类-您可以执行以下操作:

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

在此阶段,我不认为Str类在Laravel 4中-但是您可以在Composer中添加其中的一部分以添加到自己的项目中


感谢您的建议,似乎我将不得不使用Meido端口大声笑
fl3x7

如今,Laravel 4具有Str类。请参阅达斯汀·格雷厄姆(Dustin Graham)的回复。
trm42

对,那是正确的。当我最初发布此答案时,是在Laravel 4 Beta期间,Str类不存在
Laurence

原始答案在哪里?现在很难找到4.1的任何文档... :(
Srneczek '16

15

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

极限示例:

$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;

Laravel 5.8更新

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

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

输出量

Lorem ipsu ... 

这是为了处理字符串中的单词

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

输出量

Lorem ipsum ... 

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


1
非常干净的解决方案。为我工作。IMO的最佳答案
maximus1127

@ maximus1127非常感谢您为学习所做的努力,很高兴我能为您提供帮助。
Vipertecpro

1
大!我很想知道更多答案。
mhrabiee

如果您拥有Lorem ipsum的dolor之类的字符串,它将返回正确的结果,该怎么办?
Rishi

@Rishi是的,它将返回正确的结果,顺便说一句,您在谈论极限?还是言语?
Vipertecpro


5

为了使代码保持干燥,并且如果您的内容来自模型,则应采用略有不同的方法。像这样编辑模型(在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

这适用于Laravel 5:

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


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)}}
若昂梅洛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.