Обрезать строку в шаблонах лезвия Laravel

Есть ли в Laravel модификатор усечения для шаблонов лезвий, очень похожий на Smarty?

Я знаю, что могу просто записать реальный php в шаблоне, но я ищу что-то более приятное для написания (давайте не будем вдаваться в подробности PHP - это дискуссия о движке шаблонов).

Так, например, я ищу что-то вроде:

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

Я знаю, что могу использовать что-то вроде Twig через композитор, но я надеюсь на встроенную функциональность в самом Laravel.

Если нет, то можно создать свои собственные многоразовые модификаторы, такие как Smarty. Мне нравится тот факт, что Blade не лишен синтаксиса, но я думаю, что усечение - действительно удобная функция.

Я использую Laravel 4.


person fl3x7    schedule 21.02.2013    source источник
comment
как насчет Laravel 5?   -  person Hossam Maher    schedule 27.02.2016
comment
@HosMercury Для L5 см. stackoverflow.com/questions/29281013/   -  person fl3x7    schedule 01.03.2016


Ответы (12)


В 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

person Anil Singh    schedule 23.07.2014
comment
Правильный ответ, так как вариант использования находится в представлении Blade. - person Frisbetarian; 08.06.2016
comment
В версии 5.8 убраны str помощники, вместо них нужно использовать Illuminate\Support\Str::limit($string) - person Hassan Azimi; 11.04.2019
comment
str_limit устарел - person Omer; 19.10.2019
comment
Первые 3 символа: {{\ Illuminate \ Support \ Str :: limit ($ string, 0, 3)}} - person Pedro Cardoso; 12.03.2021

В Laravel 4 есть Str::limit, который будет обрезаться до точного количества символов, а также Str::words, который будет обрезаться на границе слова.

Проверить:

person Dustin Graham    schedule 28.08.2013

Изменить: этот ответ был опубликован во время бета-тестирования Laravel 4, когда класса Str не существовало. Теперь есть лучший способ сделать это в Laravel 4 - ответ Дастина ниже. Я не могу удалить этот ответ из-за правил SO (он не позволяет мне)

Сам Blade не имеет такой функции.

В Laravel 3 был класс Str, который вы могли сделать:

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

На данном этапе я не верю, что класс Str находится в Laravel 4 - , но вот его порт, который вы можете включить в композитор, чтобы добавить в свой проект

person Laurence    schedule 22.02.2013
comment
Спасибо за предложение, кажется, мне придется уступить и использовать порты Meido lol - person fl3x7; 22.02.2013
comment
В настоящее время в Laravel 4 есть класс Str. См. Ответ Дастина Грэма. - person trm42; 15.12.2013
comment
Да, это правильно. Когда я изначально опубликовал этот ответ, это было во время бета-версии Laravel 4, когда класс Str не существовал - person Laurence; 16.12.2013
comment
Где оригинальный ответ? Чертовски невозможно найти какие-либо документы для 4.1 сейчас ... :( - person Srneczek; 09.04.2016

Обновление для Laravel 7. *: Свободные строки т.е. более плавный объектно-ориентированный интерфейс для работы со строковыми значениями, позволяющий связывать несколько строковых операций вместе с использованием более удобочитаемого синтаксиса по сравнению с традиционными строковыми операциями.

limit Пример:

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

person Vipertecpro    schedule 01.07.2019
comment
очень чистое решение. работал у меня. лучший ответ ИМО - person maximus1127; 29.12.2019
comment
@ maximus1127 Большое спасибо за ваши усилия в обучении, я рад, что могу быть вам полезен. - person Vipertecpro; 29.12.2019
comment
Большой! Тип ответа, я бы хотел увидеть больше. - person mhrabiee; 13.01.2020
comment
Что произойдет, если у вас будет такая строка, как dolor Lorem ipsum, вернет ли она правильный результат? - person Rishi; 12.08.2020
comment
@Rishi Да, он вернет правильный результат, кстати, о каком методе вы говорите лимит? или слова? - person Vipertecpro; 13.08.2020

Вы можете установить пространство имен, например:

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

Чтобы ваш код оставался СУХИМ, и если ваш контент исходит из вашей модели, вам следует принять немного другой подход. Отредактируйте свою модель так (проверено в 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 }}
person Guillaume Pommier    schedule 19.04.2019

Это работает на Laravel 5:

{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
person Ofor Emma    schedule 25.07.2018

Вы можете установить ограничение строки, как показано ниже в примере:

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

Он будет отображать только 20 букв, включая пробелы, и оканчивается на ....

Пример изображения  Это показывает пример ограничения строки

person Ganesh Khadka    schedule 26.02.2019

Для таких простых вещей я бы предпочел сделать помощника, например:

создайте 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) }}

Затем вы можете использовать эту простую функцию в своем приложении глобально.

person stefanr    schedule 14.09.2019

Вы можете использовать sub_str:

{{substr($myVariable,10)}}
person WalterV    schedule 12.12.2020

Обновление 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>
person Shamsheer    schedule 20.12.2019

В Laravel 4 и 5 (до 5.7) вы можете использовать str_limit, который ограничивает количество символов в строке.

Находясь в Laravel 7 и выше, вы можете использовать помощник Str :: limit.

//For Laravel  to Laravel 7

{{ Illuminate\Support\Str::limit($post->title, 20, $end='...') }}
person zahidsoft    schedule 12.05.2020
comment
Laravel 7, используйте только {{Str :: limit ($ chamado- ›subClient-› name, 10)}} - person João Mello; 04.07.2020