27

I have a custom function and I want to pass it in a blade template. Here is the function:

function trim_characters( $text, $length = 45, $append = '…' ) {

    $length = (int) $length;
    $text = trim( strip_tags( $text ) );

    if ( strlen( $text ) > $length ) {
        $text = substr( $text, 0, $length + 1 );
        $words = preg_split( "/[\s]| /", $text, -1, PREG_SPLIT_NO_EMPTY );
        preg_match( "/[\s]| /", $text, $lastchar, 0, $length );
        if ( empty( $lastchar ) )
            array_pop( $words );

        $text = implode( ' ', $words ) . $append;
    }

    return $text;
}

And the usage is like this:

$string = "A VERY VERY LONG TEXT";
trim_characters( $string );

Is it possible to pass a custom function to the blade template? Thank you.

wobsoriano
  • 10,649
  • 23
  • 77
  • 143

2 Answers2

52

You don't have to pass anything to blade. If you define your function, you can use it from blade.


  1. Create a new app/helpers.php file.
  2. Add your trim_characters function to it.
  3. Add that file to your composer.json file.
  4. Run composer dump-autoload.

Now just use the function directly in blade:

{{ trim_characters($string) }}
Community
  • 1
  • 1
Joseph Silber
  • 205,539
  • 55
  • 352
  • 286
1

Another approach is injecting service. See docs at https://laravel.com/docs/6.x/blade#service-injection

Define your function inside a class then inject it inside your Blade

class Foo {
    trim_characters($string) {....}
}

Then in your blade file

@inject('foo', 'Foo')

<div>{{ $foo->trim_characters($string) }}</div>
GusDeCooL
  • 5,435
  • 16
  • 64
  • 99