Если вы хотите развиваться как программист, первое что стоит почитать - это основы алгоритмизации, которые закладывают базу разработчика, чего у вас судя по всему нет: поскольку многие считают, что это сегодня никому уже не надо. Языки это уже вторично: Js/Python/Ruby/Java/Go/Rust - если есть время, можно каждый глянуть по 2-4 недели на язык.
Мало информации вы предоставили. Где хранятся остальные параметры (для фильтрации)? Почему вы их не указываете в урле?
Вообще вам нужен Paginator и/или UrlGenerator.
Если самопал какой-то, то надо передавать в твиг остальные параметры и добавлять их в урл:
Правильнее так: отдельные таблицы для сущностей + языковые таблицы для них.
Например: products + products_i18n
В первой все поля, которые не зависят от языка, в i18n - соответственно, все зависящие (обычно текстовые) от языка.
products: id, category_id
products_i18n: product_id, language_id, title
Да ничто вам не поможет. Если кто-то захочет накрутить голосование, он это сделает, чтобы вы там не изобретали. Единственный более-менее вариант это привязка к IP, т.к. его теоретически сложнее всего менять, все остальные значения легко подделываются в запросах.
Просто посмотрите на все заголовки и параметры в запросе и подумайте, насколько легко менять тот или иной, чтобы пользователь выглядел как новый/старый
Сейчас пока склоняюсь к генерации 9-значного числа без 0 и хранении его как INT, но сами понимаете, что это смех смехом.
Почему? Можно вообще сделать число из диапазона 1000-9999. Или вы думаете, что кому-то понадобится перебирать 9к вариантов? Храните этот секретный код в базе с привязкой к id счета. И потом проверяете связку id+secret
Если нет проблем с английским, можно попробовать Laravel: на русском не так много материалов по нему в виду малой популярности у нас. Если проблемы есть, возможно стоить посмотреть на yii2.
Symfony это уже немного другой уровень. (Быдло-)Кодить на нём может в принципе любой, но чтобы проникнуться им и его гибкостью, нужно к этому еще прийти.