3 / 3 / 6
Регистрация: 31.05.2014
Сообщений: 177
|
|
1 | |
MVC маршруты и БД21.02.2018, 13:48. Показов 801. Ответов 14
Только начал знакомится с MVС. В сети миллион примеров как реализовать MVC модель на примере простенького сайта где как правило весь маршрут - это `news/index` и `news/1234`, делают это на основе регулярных выражений. Возможно это правильно, хотя выглядит конечно не очень. Меня интересует, как продолжить, например на сайте есть раздел "Электроника"(`somesite.com/electronika/`), если я все правильно понимаю, для этого раздела должен существовать контроллер `ElectronikaConroller` в нем `ActionIndex` метод, в котором мы вызываем "представление" главной страницы раздела "Электроника", соответственно в файле с маршрутами должен быть маршрут с ключом "Electronika". Эти разделы могут иметь `N` дочерних страниц, эти разделы из админ панели сайта необходимо создавать новые, так что для каждого раздела нужен свой контроллер или один общий, например `CatalogController`? Если один общий, тогда при переходе `somesite.com/catalog/`, получаем список каталогов (`ActionIndex`), потом `somesite.com/catalog/electronika`(`ActionSection`), получили список товаров.
На этом этапе я начинаю закипать. Меня интересует 2 вопроса : 1. Правильно ли я себе в воображении нарисовал, что существующие маршруты необходимо хранить в БД? Например есть таблица `catalogs`, и в ней поля `id, name, route` и тд. В `route` хранить ключ, например `electronika` а при переходе по ссылке `somesite.com/catalog/electronika` в контроллере `CatalogController` в методе `ActionSection` обратится к модели `Catalogs`, в которой я подключусь к БД, найду соответствие и отдам в представление результат если он есть? 2. Второй вопрос, это более глубокая вложенность, если первый хоть и не полностью понятен, но более ли менее я его могу себе представить, то тут совсем тупик. Например ссылка следующая `somesite.com/catalog/elektronika/kompyutery-i-komplektuyuschie/komplektuyuschie-i-aksesuary/moduli-pamyati/`, `catalog` - `CatalogController`, `electronika` - `ActionSection` а дальше что, как формировать более вложенные? Код я еще не писал, вставлять нечего, прошу теорию.
0
|
21.02.2018, 13:48 | |
Ответы с готовыми решениями:
14
Структура "Маршруты", найти маршруты начинающиеся или оканчивающиеся в заданном пункте Как широко применяется MVC в программировании на Java? Стоит ли изучать MVC? связь MVC и MVVM. Трудно ли освоить mvc параллельно с изучением ASP.NET ASP.net MVC против MVC обычного |
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
|
|
21.02.2018, 14:06 | 2 |
Если на сайте 100 одинаковых разделов, отличающихся только контентом (текст, картинки, ссылки на статьи и т.п.), нет смысла создавать 100 контроллеров, создаёте один общий.
Единственное, сразу с 1-го уровня начинать динамическую часть не очень удобно (больше геморроя), гораздо проще 1-ым параметром писать название контроллера, вторым id или URL статьи, т.е. site.ru/catalog/electronika, site.ru/products/iphone6s. А когда идёт сразу site.ru/electronika, появляется промежуточная часть - нужно понять, что такое electronika - статья, товар, категория и т.п. Да. Для удобства создаёте отдельное поле типа `route_cache`и храните там полный URL раздела. Затем в админке нужно будет учесть, что при изменении URL текущего раздела также автоматом должны перегенерироваться пути всех потомков.
1
|
3 / 3 / 6
Регистрация: 31.05.2014
Сообщений: 177
|
|
21.02.2018, 16:47 [ТС] | 3 |
Jodah, подскажите, а как реализовать когда вот такая вложенность somesite.com/catalog/elektronika/kompyutery-i-komplektuyuschie/komplektuyuschie-i-aksesuary/moduli-pamyati/, Понятно что "catalog" это имя контроллера, "electronika" это action метод, а как дальше, что делать с kompyutery-i-komplektuyuschie, komplektuyuschie-i-aksesuary, moduli-pamyati это все принимать как за параметры, то есть фильтровать запрос или еще лепить контроллеров? Я что то запутался((
0
|
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
|
|
21.02.2018, 21:01 | 4 |
В данном случае можно сделать один метод для всего. У вас ведь всего 2 ситуации - либо после /catalog/ ничего нет и отображаем список разделов, либо что-то есть и отображаем конкретный раздел.
Зачем? Между /catalog/elektronika/ и /catalog/elektronika/kompyutery/ нет никакой разницы, просто берите текущий URL (только без гет-параметров) и ищите по нему категорию в БД.
0
|
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,211
|
|
22.02.2018, 10:20 | 5 |
геморройный урл так то, много пота, мало толку
/catalog/12345/а_дальше/можно_писать/что_душенька_пожелает/чисто_для_SEO 12345 это как раз ID для модулей памяти
0
|
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
|
|
22.02.2018, 23:55 | 6 |
тестировал как-то полный url, получилось что при длине url 255 символов, 10 уровней вложенности(т.е. 10 последовательных запросов по фрагментам url) срабатывали на порядок(!) быстрее чем один запрос по целому url используемого в качестве первичного ключа. Страниц в таблице было несколько тысяч. Понятно что длинные строки полностью не индексируются, на коротких url возможно будет эффект, но для себя я решил, что такое кеширование только усложнит роутер..
0
|
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
|
|
22.02.2018, 23:58 | 7 |
0
|
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
|
|
23.02.2018, 00:07 | 8 |
Не, не нагрузку. Просто нужно будет контролировать синхронность кеша и фрагментов url для каждой страницы или раздела. Потенциальная вероятность коллизий. Мелочь конечно. Для себя решил не заморачиваться. до 100 уровней вложенности(тоже тестировал) заметно увеличение времени отклика где-то процентов на 20%. Но это уже какой-то экстрим. На практике можно не заморачиваться ни кешированием url ни количеством уровней вложенности..
0
|
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,211
|
|
23.02.2018, 00:12 | 9 |
на практике каждый следующий уровень надо выяснять - откуда он вообще и что это
а если там слово, то его просто некошерно индексировать по слову, а не по ID
0
|
3 / 3 / 6
Регистрация: 31.05.2014
Сообщений: 177
|
|
26.02.2018, 11:13 [ТС] | 10 |
полудух, а как индексировать по id если в урл параметр - слово? Так как правильно делать, хранить до каждой записи весь урл или частично? Например : somesite.com/catalog/electronika/notebooks/macbook_pro_2012, в записи в БД, в таблице items в поле route_cache хранить /electronika/notebooks/macbook_pro_2012 или только macbook_pro_2012? Наверное надо добавить еще "_id" иначе как идентифицировать, ведь таких макбуков может быть много. Раньше я из заголовка делал ЧПУ и при помощи .htaccess (RewriteEngine On RewriteRule ^(.+)_([0-9]+)$ ?id=$2&itemm=$1 [L]) itemm ЧПУ из бд и id = id. Теперь хочу под MVC переделать, но не могу полностью собрать пазл.
0
|
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,211
|
|
26.02.2018, 12:32 | 11 |
зачем вот это всё? чё вы себе жизнь усложняете
somesite.com/catalog/12345/electornika-notebooks-macbook-pro-2012 - вот так должно быть ну в крайнем случае вот так: somesite.com/catalog/12345-electornika-notebooks-macbook-pro-2012 12345 это ID макбука в БД, а всякие route_cache забудьте нафиг. и чтобы его выцепить rewriteEngine не нужен, сразу в пхп
0
|
3 / 3 / 6
Регистрация: 31.05.2014
Сообщений: 177
|
|
26.02.2018, 18:35 [ТС] | 12 |
полудух, это в бд хранить 12345-electornika-notebooks-macbook-pro-2012? Это id+ЧПУ?
0
|
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,211
|
|
26.02.2018, 18:37 | 13 |
в БД только ID нужен
0
|
3 / 3 / 6
Регистрация: 31.05.2014
Сообщений: 177
|
|
26.02.2018, 18:50 [ТС] | 14 |
полудух, а как ссылку формировать, если в БД только id тогда будет somesite.com/catalog/12345. Или заголовок, который на кириллице переводить в процессе формирования ссылки?
0
|
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,211
|
|
26.02.2018, 18:59 | 15 |
пишите ф-ю, вы ей массив: array('catalog', 12345, 'electronika', 'notebooks', 'macbook-pro-2012'), а она вам строку
0
|
26.02.2018, 18:59 | |
26.02.2018, 18:59 | |
Помогаю со студенческими работами здесь
15
Маршруты Маршруты и 2 сети Не работают маршруты CISCO маршруты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |