Laravel cviebrock/eloquent-suggable поместите @ в качестве префикса или отфильтруйте его в маршруте

Laravel версии 7.0, я использую пакет cviebrock/eloquent-sluggable.

Я хочу поставить @ в качестве префикса к имени пользователя.

Я включил черту Sluggable в модель пользователя и установил так.

public function sluggable()
{
    return [
        'username' => [
            'source' => 'name',
            'separator' => '',
            'onUpdate' => true
        ]
    ];
}

Теперь я хочу, чтобы https://mywebsite.com/@username URL-адрес отображал профиль пользователя.

Я думаю, что либо мы можем поместить @ в качестве префикса в sluggable package, либо мы можем обнаружить его в маршруте laravel.

Может ли кто-нибудь предложить мне лучший способ?

Спасибо


person lovecoding    schedule 24.07.2020    source источник


Ответы (2)


Я бы порекомендовал вам попробовать метод method от eloquent-sluggable и сгенерировать там слаг с префиксом (т. в формате @username) вместо того, чтобы сохранять @ как часть маршрута.

Обоснование этого совета заключается в том, что когда вы создаете и сохраняете @ в самом ярлыке, а не в маршруте (как я понял, вы задавались вопросом, какой из них лучше), вы упрощаете задачу ссылки на пользователей с символом @, поскольку вам нужно только запросить сопоставление записи, и вам не нужно заботиться о преобразованиях (например, ставить префикс username с @ при создании ссылки) туда и обратно.

Обновление: добавлен базовый пример для method перед именем пользователя с префиксом @

Это базовый пример, показывающий, как указать пользователю префикс @. Не забудьте добавить пробелы, которые вы обрабатываете сами, на случай, если имена пользователей могут их содержать.

  return [
    'username' => [
      ...,
      'method' => function ($username, $separator) {
        // example from docs: strtolower(preg_replace('/[^a-z]+/i', $separator, $string));
        return "@{$username}";
      },
    ]
  ];
person Vitaly Krenel    schedule 24.07.2020
comment
Не могли бы вы предложить код для использования method? Спасибо - person lovecoding; 24.07.2020
comment
@lovecoding-laravel Я обновил ответ, включив в него небольшой пример. Я думаю, что вы можете продолжать улучшать его, чтобы он соответствовал вашим требованиям. - person Vitaly Krenel; 24.07.2020

Я нашел лучшее решение.

Я мог бы легко добавить @ в маршрут laravel.

Route::get('/@{username}', 'HomeController@user')->name('user.index');

Мы можем сохранить имя пользователя без @ и поставить @ в качестве префикса в маршруте laravel.

person lovecoding    schedule 13.08.2020