Existe um modificador de truncamento para os modelos de lâmina no Laravel, muito parecido com o Smarty?
Eu sei que poderia simplesmente escrever o php real no modelo, mas estou procurando por algo um pouco melhor para escrever (não vamos entrar em todo o PHP é um debate sobre motor de templates).
Por exemplo, estou procurando algo como:
{{ $myVariable|truncate:"10":"..." }}
Eu sei que poderia usar algo como Twig via compositer, mas estou esperando uma funcionalidade integrada no próprio Laravel.
Caso contrário, é possível criar seus próprios modificadores reutilizáveis, como o Smarty fornece. Eu gosto do fato de que Blade não exagera com toda a sintaxe, mas acho que truncar é uma função muito útil de se ter.
Estou usando o Laravel 4.
Respostas:
No Laravel 4 e 5 (até 5.7), você pode usar
str_limit
, que limita o número de caracteres em uma string.No Laravel 5.8 ou superior, você pode usar o
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='...') }}
Para mais funções auxiliares do Laravel http://laravel.com/docs/helpers#strings
fonte
str
ajudantes foram removidos, você deve usar em seuIlluminate\Support\Str::limit($string)
lugarO Laravel 4 tem o
Str::limit
que truncará para o número exato de caracteres e também oStr::words
que truncará no limite da palavra.Verificação de saída:
fonte
Str::words
existe um equivalente de no Larvel 5.2?Edit: Esta resposta foi postada durante o beta do Laravel 4, quando a classe Str não existia. Agora existe uma maneira melhor de fazer isso no Laravel 4 - que é a resposta de Dustin abaixo. Não posso deletar esta resposta devido às regras do SO (não me permite)
O próprio Blade não possui essa funcionalidade.
No Laravel 3 havia a classe Str - que você poderia fazer:
{{ Str::limit($myVariable, 10) }}
Neste estágio, não acredito que a classe Str esteja no Laravel 4 - mas aqui está uma versão dela que você pode incluir no compositor para adicionar ao seu próprio projeto
fonte
Limite Exemplo:
$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);
Resultado
palavras Exemplo:
$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');
Resultado
Perfectly balanced, as >>>
Para usar o helper no controlador, não se esqueça de incluir / usar a classe também
use Illuminate\Support\Str;
Isso é para lidar com caracteres da string :
{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}
Resultado
Isso é para lidar com palavras da string :
{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}
Resultado
Aqui está a documentação mais recente do auxiliar para lidar com os auxiliares de string do Laravel
fonte
Você pode definir o namespace como:
{!! \Illuminate\Support\Str::words($item->description, 10,'....') !!}
fonte
Para manter seu código DRY, e se seu conteúdo vier do seu modelo, você deve adotar uma abordagem um pouco diferente. Edite seu modelo assim (testado em 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, '...'); } } ?>
Então, em sua opinião:
{{ $comment->short_description }}
fonte
Isso funciona no Laravel 5:
{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
fonte
Você pode definir o limite da string conforme o exemplo abaixo:
<td>{{str_limit($biodata ->description, $limit = 20, $end = '...')}}</td>
Ele exibirá apenas as 20 letras, incluindo espaços em branco e termina com ....
Imagem de exemplo
fonte
Para coisas simples como esta, prefiro fazer um ajudante - por exemplo:
crie um
helpers.php
arquivo em seu/app/helpers.php
com o seguinte conteúdo:<?php if (! function_exists('short_string')) { function short_string($str) { $rest = substr($str, 0, 10); return $rest; } }
Registre o
helper.php
at autoload em seucomposer.json
"autoload": { "files": [ "app/helpers.php" ], "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ] }
Depois disso, você pode usar em seu arquivo blade, por exemplo:
{{ short_string($whatever_as_text) }}
Você pode usar esta função simples, então, globalmente em seu aplicativo.
fonte
Você pode usar sub_str:
{{substr($myVariable,10)}}
fonte
Atualização do 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>
fonte
No Laravel 4 e 5 (até 5.7), você pode usar str_limit, que limita o número de caracteres em uma string.
Enquanto no Laravel 7 ou superior, você pode usar o auxiliar Str :: limit.
//For Laravel to Laravel 7 {{ Illuminate\Support\Str::limit($post->title, 20, $end='...') }}
fonte