mardi 21 avril 2020

Overriding default str_slug - possible? Laravel-7

We have users from TamilNadu and it looks like Laravel's default Str::slug() cannot handle characters like: தமிழ் . It simply returns a blank string. This is resulting into 404's on the profile pages of the users.

I'm wondering how do I fix this issue without disturbing the rest of my URLs. I think one way to fix this is to override the default Str::slug() function and check if the original function returns an empty string. If it does, I could comment the first field of as $title = static::ascii($title). then its works. But i don't want to disturb the default Str::slug() method. at the same time don't know how to override it.

Default Str::slug():

public static function slug($title, $separator = '-')
{
  //$title = static::ascii($title);

  // Convert all dashes/underscores into separator
  $flip = $separator == '-' ? '_' : '-';
  $title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);

  // Remove all characters that are not the separator, letters, numbers, or whitespace.
  $title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', mb_strtolower($title));

  // Replace all separator characters and whitespace by a single separator
  $title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);

  return trim($title, $separator);
}

How are you handling this in your app? Thanks for advance..



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire