Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
3 / 3 / 6
Регистрация: 31.05.2014
Сообщений: 177
1

MVC маршруты и БД

21.02.2018, 13:48. Показов 801. Ответов 14
Метки c, mvc (Все метки)

Author24 — интернет-сервис помощи студентам
Только начал знакомится с 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2018, 13:48
Ответы с готовыми решениями:

Структура "Маршруты", найти маршруты начинающиеся или оканчивающиеся в заданном пункте
Здравствуйте. Дано такое задание: "Написать программу, отладить ее, протестировать. При...

Как широко применяется MVC в программировании на Java? Стоит ли изучать MVC?
Здравствуйте. Начинающий java-программист. Буквально недавно только закончил изучать Core. Теперь...

связь MVC и MVVM. Трудно ли освоить mvc параллельно с изучением ASP.NET
Здравствуйте, начал изучать ASP.NET для курсовой работы. Начал читать "Мак-Дональд М., Фримен А.,...

ASP.net MVC против MVC обычного
Здраствуйте, читая книгу "Сандерсон С - ASP.NET MVC3 Framework с примерами на C# для...

14
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
21.02.2018, 14:06 2
Цитата Сообщение от Yourasik Посмотреть сообщение
например на сайте есть раздел "Электроника"(`somesite.com/electronika/`), если я все правильно понимаю, для этого раздела должен существовать контроллер `ElectronikaConroller`
Если на сайте 100 одинаковых разделов, отличающихся только контентом (текст, картинки, ссылки на статьи и т.п.), нет смысла создавать 100 контроллеров, создаёте один общий.

Единственное, сразу с 1-го уровня начинать динамическую часть не очень удобно (больше геморроя), гораздо проще 1-ым параметром писать название контроллера, вторым id или URL статьи, т.е. site.ru/catalog/electronika, site.ru/products/iphone6s.

А когда идёт сразу site.ru/electronika, появляется промежуточная часть - нужно понять, что такое electronika - статья, товар, категория и т.п.

Цитата Сообщение от Yourasik Посмотреть сообщение
1. Правильно ли я себе в воображении нарисовал
Да.

Цитата Сообщение от Yourasik Посмотреть сообщение
2. Второй вопрос, это более глубокая вложенность
Для удобства создаёте отдельное поле типа `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
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
21.02.2018, 21:01 4
Цитата Сообщение от Yourasik Посмотреть сообщение
"electronika" это action метод
В данном случае можно сделать один метод для всего. У вас ведь всего 2 ситуации - либо после /catalog/ ничего нет и отображаем список разделов, либо что-то есть и отображаем конкретный раздел.

Цитата Сообщение от Yourasik Посмотреть сообщение
это все принимать как за параметры, то есть фильтровать запрос или еще лепить контроллеров?
Зачем? Между /catalog/elektronika/ и /catalog/elektronika/kompyutery/ нет никакой разницы, просто берите текущий URL (только без гет-параметров) и ищите по нему категорию в БД.
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,211
22.02.2018, 10:20 5
Цитата Сообщение от Yourasik Посмотреть сообщение
Jodah, подскажите, а как реализовать когда вот такая вложенность somesite.com/catalog/elektronika/kompyutery-i-komplektuyuschie/komplektuyuschie-i-aksesuary/moduli-pamyati/, Понятно что "catalog" это имя контроллера, "electronika" это action метод, а как дальше, что делать с kompyutery-i-komplektuyuschie, komplektuyuschie-i-aksesuary, moduli-pamyati это все принимать как за параметры, то есть фильтровать запрос или еще лепить контроллеров? Я что то запутался((
геморройный урл так то, много пота, мало толку
/catalog/12345/а_дальше/можно_писать/что_душенька_пожелает/чисто_для_SEO
12345 это как раз ID для модулей памяти
0
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
22.02.2018, 23:55 6
Цитата Сообщение от Jodah Посмотреть сообщение
Для удобства создаёте отдельное поле типа `route_cache`и храните там полный URL раздела.
тестировал как-то полный url, получилось что при длине url 255 символов, 10 уровней вложенности(т.е. 10 последовательных запросов по фрагментам url) срабатывали на порядок(!) быстрее чем один запрос по целому url используемого в качестве первичного ключа. Страниц в таблице было несколько тысяч. Понятно что длинные строки полностью не индексируются, на коротких url возможно будет эффект, но для себя я решил, что такое кеширование только усложнит роутер..
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
22.02.2018, 23:58 7
Цитата Сообщение от otto-fukin Посмотреть сообщение
усложнит роутер..
Усложнит в смысле увеличит нагрузку?
0
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
23.02.2018, 00:07 8
Цитата Сообщение от Jodah Посмотреть сообщение
Усложнит в смысле увеличит нагрузку?
Не, не нагрузку. Просто нужно будет контролировать синхронность кеша и фрагментов 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
Цитата Сообщение от Yourasik Посмотреть сообщение
Например : somesite.com/catalog/electronika/notebooks/macbook_pro_2012, в записи в БД, в таблице items в поле route_cache хранить /electronika/notebooks/macbook_pro_2012 или только macbook_pro_2012
зачем вот это всё? чё вы себе жизнь усложняете
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2018, 18:59
Помогаю со студенческими работами здесь

Маршруты
Добрый день, форумчане! Есть класс public class AccountModel { ...

Маршруты и 2 сети
Доброго всем дня. Ребята, подскажите. Есть 1 сеть: 192.168.7.0 и 192.168.8.0. Необходимо чтобы эти...

Не работают маршруты
Доброго времени суток! У меня возникла такая проблема. При открытии файла index.htm через...

CISCO маршруты
Ребята не могу разобраться! Помогите! CISCO 2911 только учусь, знаний не википедия ... имеется два...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru