Existe-t-il un modificateur tronqué pour les modèles de lames dans Laravel, un peu comme Smarty?
Je sais que je pourrais simplement écrire le php réel dans le template mais je cherche quelque chose d'un peu plus agréable à écrire (n'entrons pas dans l'ensemble de PHP est un débat sur le moteur de template).
Par exemple, je recherche quelque chose comme:
{{ $myVariable|truncate:"10":"..." }}
Je sais que je pourrais utiliser quelque chose comme Twig via composer mais j'espère des fonctionnalités intégrées dans Laravel lui-même.
Sinon, il est possible de créer vos propres modificateurs réutilisables comme Smarty le propose. J'aime le fait que Blade ne soit pas excessif avec toute la syntaxe, mais je pense que truncate est une fonction vraiment pratique à avoir.
J'utilise Laravel 4.
Réponses:
Dans Laravel 4 & 5 (jusqu'à 5.7), vous pouvez utiliser
str_limit
, ce qui limite le nombre de caractères dans une chaîne.Dans Laravel 5.8 up, vous pouvez utiliser l'
Str::limit
assistant.//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='...') }}
Pour plus de fonctions d'assistance Laravel http://laravel.com/docs/helpers#strings
la source
str
aides ont été supprimées, vous devez les utiliser à laIlluminate\Support\Str::limit($string)
placeLaravel 4 a
Str::limit
ce qui tronquera au nombre exact de caractères, et aussiStr::words
qui tronquera sur la limite du mot.Check-out:
la source
Str::words
existe dans Larvel 5.2?Edit: Cette réponse a été publiée lors de la version bêta de Laravel 4, lorsque la classe Str n'existait pas. Il existe maintenant une meilleure façon de le faire dans Laravel 4 - qui est la réponse de Dustin ci-dessous. Je ne peux pas supprimer cette réponse en raison des règles SO (cela ne me laissera pas)
Blade lui-même n'a pas cette fonctionnalité.
Dans Laravel 3, il y avait la classe Str - ce que vous pouviez faire:
{{ Str::limit($myVariable, 10) }}
À ce stade, je ne pense pas que la classe Str soit dans Laravel 4 - mais en voici un portage que vous pouvez inclure dans composer pour l'ajouter à votre propre projet
la source
Exemple de limite :
$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);
Production
mots Exemple:
$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');
Production
Perfectly balanced, as >>>
Pour utiliser helper dans le contrôleur, n'oubliez pas d'inclure / utiliser également la classe
use Illuminate\Support\Str;
C'est pour gérer les caractères de la chaîne :
{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}
Production
C'est pour gérer les mots de la chaîne :
{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}
Production
Voici la dernière documentation d'aide pour la gestion des chaînes Laravel Helpers
la source
Vous pouvez définir l'espace de noms comme:
{!! \Illuminate\Support\Str::words($item->description, 10,'....') !!}
la source
Pour garder votre code SEC, et si votre contenu provient de votre modèle, vous devez adopter une approche légèrement différente. Modifiez votre modèle comme tel (testé en 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, '...'); } } ?>
Ensuite, à votre avis:
la source
Cela fonctionne sur Laravel 5:
{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
la source
Vous pouvez définir une limite de chaîne comme dans l'exemple ci-dessous:
<td>{{str_limit($biodata ->description, $limit = 20, $end = '...')}}</td>
Il n'affichera que les 20 lettres, espaces compris et se termine par ...
Exemple d'image
la source
Pour des choses simples comme celle-ci, je préférerais faire une aide - par exemple:
créez un
helpers.php
fichier dans votre/app/helpers.php
avec le contenu suivant:<?php if (! function_exists('short_string')) { function short_string($str) { $rest = substr($str, 0, 10); return $rest; } }
Enregistrez le
helper.php
at autoload dans votrecomposer.json
"autoload": { "files": [ "app/helpers.php" ], "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ] }
Après cela, vous pouvez utiliser dans votre fichier lame par exemple:
Vous pouvez utiliser cette fonction simple, ensuite, globalement dans votre application.
la source
Mise à jour de 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>
la source
Dans Laravel 4 & 5 (jusqu'à 5.7), vous pouvez utiliser str_limit, qui limite le nombre de caractères dans une chaîne.
Dans Laravel 7, vous pouvez utiliser l'assistant Str :: limit.
//For Laravel to Laravel 7 {{ Illuminate\Support\Str::limit($post->title, 20, $end='...') }}
la source