Я уже очень долгое время пишу на php. Сделал кучу сайтов, магазинов и т.д. Своя админка. Но в целом как это все было быдлокодерством, так и осталось. Т.е. несмотря на то, что сделал много, проф программистом себя не считаю. Всегда работал один, НЕ в компании себе подобных, поэтому учиться было не у кого. Сейчас больше не хочу делать сайты на своем собственном движке, которые дорабатывался все эти годы и который в принципе исполняет свои функции. Не хочу по той причине, что как ни крути, но он примитивен и «страшен» внутри. Хочу выйти на новый уровень, начать писать нормальный код. Ну или хотя бы пытаться.
Стоял перед выбором: переписать свой движок, взять готовую CMS и разбираться с ней, либо изучить какой-нибудь фреймворк. После долгого чтения форумов, хабра и т.д., пришел к выводу что нужно рассматривать третий вариант. Также после долгих мучительных выборов остановился на Yii.
Т.к. я никогда не работал с фреймворками, то я никак не могу в голове уложить и четко представить себе что такое «framework». Раньше я думал, что это просто набор готовых классов, который уже содержит в себе решение многих задач, которые не придется решать программисту. Затем узнал, что фрейворк – это больше чем просто набор классов. Например, тот же Yii уже после установки имеет готовую архитектуру веб-приложения, базу данных и т.д. Т.е. по сути, готовый каркас, на основе которого можно писать свое.
Вопрос 1. «Готовый каркас» — это клиентская часть сайта (front end) или каркас админки (back end)? Или же изначально каркас – это просто готовая файловая структура, классы, база данных и т.д., а клиентскую часть и админскую я должен писать сам, на основе этого каркаса? Я боюсь, что очень неясно изъясняюсь, т.к. всю эту кашу мыслей в голове пытаюсь преобразовать в четкий вопрос.
Когда я, скажем, пишу на php с нуля, я создаю клиентскую часть сайта: index.php, файлы шаблонов, классы, БД и т.д. И создаю админскую часть, у которой свой index, свои шаблоны и т.д. В Yii я тоже пишу админку с нуля (используя классы фреймворка) или же админская часть уже существует и мне ее уже нужно допиливать до своих нужд (верстать внешний вид и навешивать свои функции)?
Вопрос 2. Я приведу простой и дурацкий пример, для того, чтобы на его основе задать вопрос. Скажем, на сайте есть разделы: «новости», «статьи», «события», «вопросы/ответы» и т.д. Я это все общим словом называю «списки». Т.е. для каждого такого списка есть своя таблица в БД (например, «статьи»). В админской части сайта я создаю раздел, где пользователь может «добавлять/редактировать/удалять» элементы этого списка (статьи). Админская часть сайта предоставляет шаблон, в котором соответствующая форма, куда вводятся «название», «текст», «автор» и т.д. статьи (для каждого списка свой набор характеристик). Я правильно понимаю, что процесс создания таких «списков», т.е. добавления новых таблиц (скажем, были на сайте новости и статьи, а я еще добавляю список (таблицу) «авторы») он максимально автоматизирован? Или я это делаю, так как и сейчас, т.е. сам создаю новую таблицу в БД (таблица «авторы»), добавляю столбцы этой таблицы (имя автора, дата рождения автора и т.д.), сам создаю новый раздел в админской части, шаблоны для его редактирования, класс для работы с авторами и т.д.?
Вопрос 3. Насколько гибок фреймворк. Задам этот вопрос на основе предыдущего. Скажем, у нас есть две таблицы «статьи» и «авторы». Каждая статья связана с каким-либо автором (через ID в БД). И заказчик сайта просит чтобы в админке это выглядело, например так: Заходим в раздел «статьи» и сначала видим список авторов. Кликнули по автору, и попали на страницу со списком статей этого автора. И уже кликнув по конкретной статье, мы переходим к ее редактированию. Такая вот реализация администрирования статей. А, например, на другом сайте другой заказчик хочет, чтобы схема была такая: Зашли в админке в раздел «статьи», увидели список всех статей. Вошли в конкретную статью и на странице ее редактирования есть выпадающий список авторов (которые, естественно, берутся из таблицы «авторы») и через этот выпадающий список мы привязываем статью к конкретному автору. Т.е. я привел в пример два разных варианта реализации функционала. Делая сайт на своих кодах, я могу без проблем реализовывать любые подходы. Тут я царь и бог. А как насчет Yii, могу ли я извращаться как угодно? Ведь, допустим, работаю с какой-то известной CMS системой, такие вещи не прокатят. CMS-ки имеют строго заданный функционал. Этот функционал, конечно, бывает огромен, но все-равно загнан в какие-то строгие рамки. И если хочется что-то кардинально изменить, то нужно лезть в коды и переписывать.
Вопрос 4. Некоторые люди, обсуждая темы фреймворков, на том же хабре, например, часто говорят фразы типа: «я вот попробовал проект сделать на Yii, потом решил изучить Kohana и сделал на нем, а потом еще сделал на Zend…». Ладно, я понимаю, что есть люди, которые очень обучаемы и они могут довольно быстро переходить от одного фреймворка к изучению другого и делать на нем проект, но я не понимаю КАК это может быть рентабельно??? Ведь мало сделать сайт (клиентскую часть), сейчас же в 90% случаев к сайту нужна админка. Неужели программисты, так легко, переходят от одного фреймворка к другому, так же легко пишут для него свою админку? Или же все-таки админка уже наработана, скажем, на одном проекте (фреймворке) и просто каким-то образом программисты ее мигрируют в другие свои проекты (на других фреймворках), хотя я не понимаю как это может быть. На мой взгляд, из своих наработок можно перенести только представление (т.е. наборы шаблонов, внешний вид), но весь функционал нужно заново затачивать на основе нового фреймворка. Или я опять чего не понимаю…
Мне кажется для начала Вам нужно почитать про ООП в целом, и далее про MVC чтобы вы могли оперировать корректной терминологией
Сейчас все очень сумбурно изложено
Вы путаете понятия фреймворка и CMS
1. Да, это лишь каркас, все нужно будет писать с нуля
В yii есть gii — это генератор кода, он упростит много рутинных вещей
2. Здесь Вы говорите о моделях и наследовании
3. Yii очень гибкий
4. Кто-то делает это просто для обучения. Нехватка опыта работы с такими инструментами заставляет думать Вас думать об этом как о чем-то невероятным, все на самом деле проще
1. Вы пишете и фронтенд и бэкенд, но при этом в Yii есть генератор, который на основе сущностей (то есть таблиц в базе данных) создаёт соответствующие контроллеры, модели и представления — то есть, и админскую часть и клиентскую, а их вы уже допиливаете до нужного заказчику функционала.
2. Вы создаёте таблицу в БД, затем запускаете генератор и он создаёт всё необходимое (см. ответ 1). Затем вы делаете правки.
3. Да, вы можете сделать и так и так. Лишнее уберёте, нужное добавите.
4. Часто люди делают всё из готовых компонентов. Для Symfony есть куча бандлов, для Зенда — куча модулей. Для Yii всяких расширений тоже превеликое множество. Для использования Twitter Bootstrap есть Yii-Booster и Yii-Bootstrap, для авторизации юзеров есть расширение, в общем, существует масса готового кода, который позволяет собрать админку и сайт из готовых блоков, примерно как в конструкторе Лего, только тут уже не маленькие кирпичики, а целые узлы.
Каркаса по-большому счету нет. То что видим после webapp это пример того, как всё может быть реализовано.
По-большому счету каркас — это изначальная структура папок, которая может быть легко изменена, если лезть под капот.
После webapp удаляем всё из protected/controllers, protected/models, protected/views, protected/data и… вроде всё, но я не уверен.
И вот перед нами чистая версия над которой и стоит работать дальше.
Как работать? Изначального разделения для функционала фронт и бек -ендов нет, но это можно исправить (или придумать/украсть свой план на основне стандартный modules).
Генерация кода будет работать против Вас до тех пор пока всё что генерирует генератор не будет кристально ясно. Когда это случится можно будет исправить templates генератора (или добавить свой) и превратить рутинные вещи в ничего и заниматься чем-то действительно клёвым.
Насколько гибок фреймворк? Примеры такие просто реализуются в любом современном фреймворке.
Про способы миграции кода с фреймворка на фреймворк не слышал, но кто-то выбирает свой любимый пробуя каждый по чуть-чуть.
Yii — достойный вариант… и для переписывания своей cms уж тем более.
Конечно же изучать стоит с документации и есть будут вопросы, то сразу на форум.