villiwalla
@villiwalla
HTML-верстка

Как получить запись из БД по её ID не используя id в url, в yii?

Есть страница где есть перечень специалистов /specialists, на ней ссылки на страницы специалистов /specialists/last_name-first_name.html
Для создания урла для страницы специалиста делаю так:
Url::toRoute(['specialists/show', 'url' => Translit::t($specialist->first_name.'-'.$specialist->last_name)])

Что бы при переходе на страницу специалиста не проводить транслитацию обратно на русский и не искать по имени и фамилии запись в БД, нужно передать id записи. Но! id не должно быть в url, как так можно сделать?

Как можно ещё на каталоге специалистов передать id записи специалиста, что-бы при переходе на страницу специалиста можно было бы использовать id для полечения записи из БД, но,
  • Вопрос задан
  • 273 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Вы хотите, что бы в url не было id, но хотите по нему искать - замкнутый круг. Чудес не бывает.
Самый простой способ, это сделать в таблице специалиста еще один столбец url и туда писать url и по нему находить. Так вы решите еще 1 проблему, которую не видите, уникальность этого url, так как даже при уникальной паре first_name и last_name после транслитерации может получиться не уникальное значение.
Писать данные в этот столбец можно при создании специалиста. Но есть еще одна проблема, это постоянство url. Если пользователь сменит first_name или last_name то менять ли этот url? Ведь ссылочная масса, которая накопилась будет вести в никуда, а если не менять этот url, то возникает вопрос целесообразности подхода в целом. Посмотрите на великих мира сего, кто прошел этот путь - соц сети. Они не автоматизируют этот процесс, они генерят уникальный url для профайла и потом предлагают произвольную смену. Это оправдано. Это правильно.
Как вариант иногда делают так:
domain.com/id_firstname_lastname при этом в экшене можно извлечь id и найти пользователя, все что после id_ носит исключительно декоративный характер. Но я не сторонник данного метода, так как отдавать в url id записи не айс. И тогда лучше отдавать хеш, а раз хеш, то опять таки доп столбец нужен и приходим к первому варианту.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы