Troncare la stringa nei modelli di blade Laravel


92

Esiste un modificatore troncato per i modelli di blade in Laravel, più o meno come Smarty?

So che potrei semplicemente scrivere il php effettivo nel modello, ma sto cercando qualcosa di un po 'più carino da scrivere (non entriamo nell'intero PHP è un dibattito sul motore di modelli).

Quindi, ad esempio, sto cercando qualcosa come:

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

So che potrei usare qualcosa come Twig tramite il compositore, ma spero in funzionalità integrate nello stesso Laravel.

In caso contrario è possibile creare i propri modificatori riutilizzabili come fornisce Smarty. Mi piace il fatto che Blade non esageri con tutta la sintassi, ma penso che truncate sia una funzione davvero utile da avere.

Sto usando Laravel 4.


che mi dici di laravel 5?
Hos Mercury

1
@HosMercury Per L5 vedere stackoverflow.com/questions/29281013/...
fl3x7

Risposte:


198

In Laravel 4 e 5 (fino a 5.7), puoi usare str_limit, che limita il numero di caratteri in una stringa.

Mentre sei in Laravel 5.8 in su, puoi usare l' Str::limithelper.

//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='...') }}

Per ulteriori funzioni di supporto Laravel http://laravel.com/docs/helpers#strings


Risposta corretta poiché il caso d'uso è nella visualizzazione Blade.
Frisbetarian

10
Nella versione 5.8 gli strhelper sono stati rimossi, devi Illuminate\Support\Str::limit($string)invece usare
Hassan Azimi

1
str_limit è obsoleto
Omer

39

Laravel 4 ha Str::limitche troncerà al numero esatto di caratteri e Str::wordsche troncerà anche sul confine della parola.

Check-out:


Sai se Str::wordsesiste un equivalente di Larvel 5.2?
Jiedara

1
No. Sembra che limiti il ​​numero di parole ora, non i caratteri. github.com/laravel/framework/blob/5.2/src/Illuminate/Support/…
Dustin Graham

Era quello che stavo cercando! Grazie !
Jiedara

32

Modifica: questa risposta è stata pubblicata durante la beta di Laravel 4, quando la classe Str non esisteva. Ora c'è un modo migliore per farlo in Laravel 4, che è la risposta di Dustin di seguito. Non posso eliminare questa risposta a causa delle regole SO (non me lo consente)

La lama stessa non ha questa funzionalità.

In Laravel 3 c'era la classe Str, che potresti fare:

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

In questa fase non credo che la classe Str sia in Laravel 4, ma ecco un port di esso che puoi includere in composer per aggiungere al tuo progetto


Grazie per il suggerimento, sembra che dovrò
cedere

Al giorno d'oggi Laravel 4 ha la classe Str. Vedi la risposta di Dustin Graham.
trm42

Si, è corretto. Quando ho pubblicato originariamente questa risposta era durante Laravel 4 Beta, quando la classe Str non esisteva
Laurence

Dov'è la risposta originale? È spaventosamente impossibile trovare documenti per 4.1 ora ... :(
Srneczek

15

Aggiornamento per Laravel 7. * : Fluent Strings, ovvero un'interfaccia più fluida e orientata agli oggetti per lavorare con i valori delle stringhe, che consente di concatenare più operazioni sulle stringhe utilizzando una sintassi più leggibile rispetto alle tradizionali operazioni sulle stringhe.

limite Esempio:

$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);

Produzione

The quick brown fox...

parole Esempio:

$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');

Produzione

Perfectly balanced, as >>>

Aggiornamento per Laravel 6. * : Richiede che questo pacchetto funzioni con tutti gli helper di laravelcomposer require laravel/helpers

Per utilizzare l'helper nel controller, non dimenticare di includere / utilizzare anche la classe

use Illuminate\Support\Str;

Aggiornamento Laravel 5.8

Questo serve per gestire i caratteri dalla stringa :

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

Produzione

Lorem ipsu ... 

Serve per gestire le parole dalla stringa :

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

Produzione

Lorem ipsum ... 

Ecco l'ultima documentazione di supporto per la gestione degli helper Laravel di stringa


1
soluzione molto pulita. ha funzionato per me. migliore risposta IMO
maximus1127

@ maximus1127 Grazie mille per i tuoi sforzi nell'apprendimento, sono contento di poterti essere utile.
Vipertecpro

1
Grande! Tipo di risposta mi piacerebbe vedere di più.
mhrabiee

Cosa succederà se hai una stringa come il dolor di Lorem ipsum restituirà il risultato corretto?
Rishi

@Rishi Sì, restituirà il risultato corretto, a proposito di quale metodo stai parlando limite? o parole?
Vipertecpro

7

Puoi impostare lo spazio dei nomi come segue:

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

5

Per mantenere il tuo codice ASCIUTTO e se i tuoi contenuti provengono dal tuo modello dovresti adottare un approccio leggermente diverso. Modifica il tuo modello in questo modo (testato in 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, '...');
    }
}
?>

Quindi a tuo avviso:

{{ $comment->short_description }}

2

Funziona su Laravel 5:

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

2

È possibile impostare il limite di stringa come nell'esempio seguente:

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

Visualizzerà solo le 20 lettere compresi gli spazi bianchi e termina con ....

Immagine di esempioMostra l'esempio del limite di stringa


Ehi, fratello, è deprecato aggiorna la tua risposta
Mahdi Safari

1

Per cose semplici come questa preferirei creare un aiutante, ad esempio:

crea un helpers.phpfile nel tuo /app/helpers.phpcon i seguenti contenuti:

<?php
if (! function_exists('short_string')) {
    function short_string($str) {
            $rest = substr($str, 0, 10);
            return $rest;
    }
}

Registra l' helper.phpautoload nel tuo filecomposer.json

   "autoload": {
        "files": [
            "app/helpers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    }

Dopodiché puoi usare nel tuo file blade ad esempio:

{{ short_string($whatever_as_text) }}

Puoi utilizzare questa semplice funzione, quindi, a livello globale nella tua app.


0

Aggiornamento 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

In Laravel 4 e 5 (fino a 5.7), puoi usare str_limit, che limita il numero di caratteri in una stringa.

Mentre sei in Laravel 7 in su, puoi usare l'helper Str :: limit.

//For Laravel  to Laravel 7

{{ Illuminate\Support\Str::limit($post->title, 20, $end='...') }}

Laravel 7, usa solo {{Str :: limit ($ chamado-> subClient-> name, 10)}}
João Mello
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.