Php 截断Laravel刀片模板中的字符串

Php 截断Laravel刀片模板中的字符串,php,laravel,laravel-blade,template-engine,texttrimming,Php,Laravel,Laravel Blade,Template Engine,Texttrimming,Laravel中的刀片模板是否有类似Smarty的截断修改器 我知道我可以在模板中写出实际的php,但我正在寻找更好的东西来编写(我们不要讨论整个php是一个模板引擎) 例如,我正在寻找类似的东西: {{ $myVariable|truncate:"10":"..." }} 我知道我可以使用类似Twig via composer的东西,但我希望在Laravel本身中内置功能 如果没有,可以像Smarty提供的那样创建自己的可重用修饰符。我喜欢Blade不会过度使用所有语法,但我认为trunca

Laravel中的刀片模板是否有类似Smarty的截断修改器

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

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

{{ $myVariable|truncate:"10":"..." }}
我知道我可以使用类似Twig via composer的东西,但我希望在Laravel本身中内置功能

如果没有,可以像Smarty提供的那样创建自己的可重用修饰符。我喜欢Blade不会过度使用所有语法,但我认为truncate是一个非常方便的函数


我正在使用Laravel4。

编辑:这个答案是在Laravel4测试版发布的,当时Str类不存在。现在有一个更好的方法在拉雷维尔4-这是达斯汀的答案如下。由于SO规则,我无法删除此答案(不允许我删除)

刀片本身不具备该功能

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

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

在这个阶段,我不相信Str类在laravel4中-要添加到您自己的项目中

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

退房:

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

在Laravel5.8以上版本中,您可以使用
Str::limit
helper

//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助手函数的信息

您可以设置如下名称空间:

{!! \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>
{{str_limit($biodata->description,$limit=20,$end='…')}
它将只显示20个字母,包括空格和以…结尾


示例图像

保持代码干爽,如果您的内容来自您的模型,您应该采用稍微不同的方法。像这样编辑您的模型(在L5.8中测试):

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

例如:

$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);
$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');
输出

The quick brown fox...
Perfectly balanced, as >>>
Lorem ipsu ... 
Lorem ipsum ... 
例如:

$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);
$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');
输出

The quick brown fox...
Perfectly balanced, as >>>
Lorem ipsu ... 
Lorem ipsum ... 
更新Laravel 6.*:您需要此软件包才能使所有Laravel正常工作 助手
composer需要laravel/helpers

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

use Illuminate\Support\Str;
Laravel 5.8更新

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

{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}
{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}
输出

The quick brown fox...
Perfectly balanced, as >>>
Lorem ipsu ... 
Lorem ipsum ... 
这用于处理字符串中的字:

{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}
{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}
输出

The quick brown fox...
Perfectly balanced, as >>>
Lorem ipsu ... 
Lorem ipsum ... 

以下是处理字符串的最新帮助程序文档

对于这样简单的事情,我更愿意做一个帮助程序-例如:

{{ short_string($whatever_as_text) }}
/app/helpers.php
中创建一个包含以下内容的
helpers.php
文件:

<?php
if (! function_exists('short_string')) {
    function short_string($str) {
            $rest = substr($str, 0, 10);
            return $rest;
    }
}
之后,您可以在刀片文件中使用,例如:

{{ 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>
@php
$value=‘人工智能’;
$var=Str::limit($value,$limit=15,$end='');
印刷费($var);
@endphp

{{{illumb\Support\Str::limit($value,7)}

{!!Str::limit($value,5)!!}
在Laravel 4和5(最多5.7)中,可以使用str_limit,它限制字符串中的字符数

在Laravel7Up中,可以使用Str::limit辅助程序

//For Laravel  to Laravel 7

{{ Illuminate\Support\Str::limit($post->title, 20, $end='...') }}
您可以使用sub_str:

{{substr($myVariable,10)}}


谢谢你的建议,看来我将不得不屈服并使用Meido ports,因为Laravel 4拥有Str类。请看达斯汀·格雷厄姆的回答。是的,这是正确的。当我最初发布这个答案时,它是在Laravel 4 Beta期间,当Str类不存在时,原始答案在哪里?现在找不到任何4.1版本的文档了…:(关于laravel 5呢?@Hosmurry For L5请参阅正确答案,因为用例位于刀片视图中。在5.8版
str
中,删除了帮助程序,您必须使用
illumb\Support\str::limit($string)
insteadstr\u limit不推荐前3个字符:{\illumb\Support\str::limit($string,0,3)}你知道Larvel 5.2中是否存在类似于
Str::words
的词吗?不知道。看起来它现在限制了字数,而不是字符数。这就是我想要的!Thx!非常干净的解决方案。对我有效。最佳答案IMO@maximus1127非常感谢你们为学习所做的努力,我很高兴我能对你们有用。太好了!回答得很好我很想看到更多。如果你有像Lorem ipsum的dolor这样的字符串,会发生什么?它会返回正确的结果吗?@Rishi是的,它会返回正确的结果,顺便说一句,你说的是什么方法限制?或者单词?Laravel 7,只使用{{{Str Str::limit($chamado->subClient->name,10)}