Задать вопрос

Изучаю Yii, появились вопросы общего плана, на которые не могу сам найти ответов?

В данный момент изучаю YII. Несколько лет до этого работал со своим самописным движком. Наконец-то решил отойти от быдлокодерства и попробовать начать работать с нормальным framework-ом.

Это мой первый опыт работы с каким бы то ни было фреймворком, поэтому в начале для меня даже было сложным само понятие Framework.

В процессе изучения возникло несколько вопросов, ответов на которые я пока не нашел и хотел бы вот задать их тем кто работает с Yii и разбирается в этом фреймворке.

1. Система контролллер->действие работает по принципу, что в URL-е есть параметр r=site/page где site – название контроллера, page – название действия в данном контроллере. Меня интересует такой вопрос: получается что структура URL-а всегда будет подчиняться этому правилу, что должно быть два параметра (контроллер и действие), либо один (контроллер)? Я не считаю дополнительных параметров, которые можно добавить, типа всяких фильтров, номеров страниц и т.д. Например, есть на сайте каталог mysite.ru/catalog – страница со списком разделов каталога (catalog – контроллер, который вызывает действие по умолчанию, которое выводит на страницу список подразделов каталога). Но если, скажем, мы зашли в какой-то раздел (например, кухонная техника), то я хочу чтобы мой URL имел такую структуру mysite.ru/catalogue/kitchen, и далее если в кухонной технике мы зашли в раздел микроволновки, то URL: mysite.ru/catalogue/kitchen/microwave. И в данном случае, я уже не понимаю, что тут контроллер, что действие и т.д. Допустимы ли такие URL-ы? Или же разрабатывая на Yii я должен делать что-то типа такого: mysite.ru/index.php?r=catalogue/view&category=microwaves (т.е. контроллер «каталог», действие «отобразить список товаров» и дополнительный параметр category, который указывает на нужный раздел товаров)? Короче говоря, суть моего вопроса в том, что дает ли Yii возможность свободно работать с URL-ами, т.е. проектировать их структуру как пожелается программисту или клиенту, или же URL-должен подчиняться каким-то строгим правилам. Я знаю, что формат «r=site/page» можно превратить в ЧПУ, типа /site/page, но это опять же жесткая структура, пара: /контроллер /действие.

2.Разработка backend или проще говоря «админки» сайта. В Yii спомощью GII можно создать CRUD операции и простейшую админскую форму. Т.е., грубо говоря, на основе существующей таблицы в БД можно автоматически создать простую админку, с помощью которой можно добавлять, удалять и редактировать записи в этой БД.
Если я делаю свою админку, со своим дизайном, со своим функционалом, я должен создавать ее с нуля, имея весь арсенал средств разработки Yii или же я должен делать ее на основе вот этих автоматом создаваемых CRUD? Например, я хочу чтобы моя админка грузилась по адресу mysite.ru/admin, имела форму авторизации, а далее уже удобную панель для работы с ней и т.д.

3. Искал в инете, но так и не нашел более подробного описания работы фреймворка. Т.е. везде описан общий принцип: запрос от клиента поступает в index.php, затем вызывается главный контроллер, он вызывает…. и т.д. Схемы рисуются, описывается принцип MVC. Но мне бы хотелось увидеть все это на более низком уровне. Т.е. конкретно: вот index.php, вот в нем функция вызова контроллера и т.д. Т.е. прямо как в режиме отладки, пройтись по всем этапам работы фреймворка, пусть не построчно, но хотя бы в порядке вызова функций (вот поступил запрос в index, затем вызвалась функция разбора URL, затем эти данные поступили в функцию контроллера, контроллер в свою очередь вызвал то, то и то… и т.д.). Можно ли где-то про это почитать, или же настраивать у себя на машине функционал для отладки и запускать в режиме отладки, отслеживая все построчно и изучая самому структуру и архитектуру фреймворка?
  • Вопрос задан
  • 3618 просмотров
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
для подобных вопросов есть официальный форум, там даже русскоязычная ветка есть.

1) по поводу маршрутизации - нет. Маршруты по сути являются биндингом конкретного урла к конкретному экшену, лепите их как хотите, все можно разрулить в коде. То что в документации и всюду примеру ущербные, это проблема сообщества.

2) Как хотите, можете настроить свои шаблоны для gii и генерить чисто под себя все, можете сгенерить и перепиливать, можете вообще не пользоваться.

3) идите в класс cwebapplication и смотрите. Архитектуры там как таковой и нету, все просто как два пальца. Если хотите понять архитектуру снизу, смотрите код фреймворка.
Ответ написан
Комментировать
@LDZ
1. Урлы настраиваются подробнейшим образом как вам нужно.
Почитайте про url manager rules. В том числе и про параметризацию урлов.

Тот же указанный вами урл mysite.ru/catalogue/kitchen/microwave можно записать в виде такого роута
'catalog(/<catname:\w+>(/<subcatname:\w+>)?)?' => 'catalog/view',


Тогда вызовется экшен view контроллера catalog, в который будут переданы в GET параметры catname и subcatname

Настраивать можно как угодно, правило роутинга - это по сути те же регулярки, которые можно написать так как надо.

2. Для создания админки есть как отдельные модули, так и возможности разделения фронтдора и бекдора. На хабре это подробно описывалось. Поищите

3. А что мешает посмотреть какой метод вызывается в index.php и проследить всю цепочку вызовов?
Ответ написан
Комментировать
Urichalex
@Urichalex
Кратко о себе)
1 и 2 вопросы - модули. Модуль catalog в нем модуль kitchen в нем контроллер например microwawes, а там уже и view и index и т.д. То же самое с админкой. Я во всех своих проектах для админки делаю отдельный модуль, а в нем контроллеры для того, чего мне нужно.
3. тупо идти и смотреть код
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы