Задался я вопросом разработки своей cms для нескольких сайтов. На данный момент использую несколько различных cms, как самописных, так и бесплатных. Суть вопроса в следующем. Хочу для ускорения будущих проектов создать модульный движок, даже что-то подобное написал, но реализация и скорость работы совсем не понравилась. Возможно тут кто-то занимался подобным? Что посоветуете? Куда копать, желательно с примерами и ссылками. То, что нашел или сильно устарело или все ссылки давно умерли. Язык php, его я знаю лучше других, хотя и не так хорошо, как хотелось бы.
Как примерно я это вижу: есть ядро cms, которое подгружает модули и больше ничего не делает. Далее я пишу к примеру модули галереи или новостей и в дальнейшем, при реализации нового сайта просто закидываю необходимые модули.
tasce: Хочется разработать что-то свое и избавить себя от изобретения велосипедов. Сайтов много, а функционал почти идентичен. К примеру на всех сайтах есть новости, контакты и т.д. Хочу попробовать оптимизировать свою работу и выбрать какой-то фреймворк, который поможет мне в дальнейшем не мучаться с развертыванием сайта, да я могу выбрать любой из них, но хочется послушать мнения других людей в этом вопросе. кто, что использовал, на какие грабли я могу наткнутся, возможно кто-то уже писал подобное и т.д. При этом не факт что я не захочу написать какой-то сложный модуль на 100к строк кода и вот в этот момент я не получу миллион проблем. Ну и разумеется подобным кодом можно и поделится, возможно кто-то захочет использовать подобную реализацию(пока гуглил наткнулся на миллион похожих вопросов)
Павел Кузьмин: То, чем вы собираетесь заниматься и есть изобретение велосипеда. Возьмите за основу тот же yii. И пишите для него модули: гелерею, контакты, новости. Сам фреймворк будет исполнять роль ядра. Создали проект. Скопировали туда нужные модули, прописали из в конфиге и готово.
HaruAtari: таких ответов я и жду. Но можно немного описать yii? , в чем преимущество и если не сложно пару реальных премеров работы с yii? Да про документацию знаю и про тысячи статей и т.д., но в конечном счете можно нарваться на статью которая уже давно устарела, а читать всю документацию для выбора фреймворка немного странно.
Павел Кузьмин: Коль пошла такая пляска, посмотрите сравнения Symfony vs Yii. В первом для разделения кода на модули есть система бандлов и сервисов, во втором система модулей.
Павел Кузьмин: Если смотреть в общем, все вреймворки одинаковы. Они дают кеш, orm, роутинг, mvc, хелперы разныеб IoC и т.п. Как раз каркас общей логики работы приложения. Так же все они дают возможность делить код на изолированные части (модули, бандлы и т.д.) и реюзать их в смоих приложениях. Я писал и на yii (и первый и второй) и на симфонии 2.6. Так же поковырял ларавел 5.
Ларавел вызвал отвращение, а вот Симфония мне понравилась. Там действительно все правильно и четко сделано. Особенно мне понравились анотации, которым там отдается предпочтение.
Но yii проще. И порог вхождения ниже и меньше ограничений накладывает. Я, конечно, люблю правильную и красивую архитектуру, чтобы кругом абстракции. Но это мешает работе. Слишком много внимания требует.
Есть распространенное мнение, что симфония подходит для больших и долгоиграющих проектов, а yii для небольших. Так вот все это глупости. Я лично участвовал в нескольких проектах на yii, которые живут уже больше 4 лет. Если сделать общение между модулями через события, то все замечательно работает и сопровождается.
Так же часто можно услышать довод, что в yii есть божетсвенный объект \Yii::$app, который связывает все приложение. Но это просто точка доступа к фабрикам. По сути \Yii::$app->getCache(), getDb() и т.п. это все IoC контейнеры. Просто в отличае от симфонии к ним можно обратиться через единую точку доступа, а не создавать экземпляры.
Я на yii пишу с самой беты первой версии и мне очень нравится этот фреймворк. Не без косяков конечно, особенно в первой версии были, но где их нет? Зато мне фреймворк помогает, и мне всего один раз пришлось с ним бороться.
Павел Кузьмин: Ну, я с ним ознакомился довольно поверхностно. Но сразу резануло глаза отсутствие нормлаьного автодополнения в IDE. Нашел в интернете специальный файл, который давал ide нужные данные и автокомплит в общем то работал. Но я считаю, что это не нормально.
И на сколько я помню фасады у них в глобальной области видимости лежат.
index0h: оф. документация это отлично, но она нужна уже после того как я буду уверен что выберу именно Symfony. Если скините пару примеров для общего ознакомления, буду признателен
index0h: я бы не сказал что Symfony хоть как-то поможет написать то, о чем говорит автор, во всяком случае это надо не один год писать.
Скорее уж лучше взять HttpKernel, маршрутизатор толковый (можно симфоневский), PHP-DI (он попроще) и попытаться построить все исключительно на композиции/декорации классов. Таких CMS я пока не видел, а перспективы сделать по настоящему гибкую структуру, которая не пытается покрыть все юзкейсы а просто позволяет допилить под себя быстро, вполне себе имеются.
Сергей Протько: о что-то подобное и хотел увидеть. Есть ссылки с примерами HttpKernel, PHP-DI? желательно небольшие, чтобы примерно понять кто это и как работает
HttpKernel - это просто абстракция над SAPI, тут сами можете разобраться. Для примера посмотрите Silex - это довольно небольшой микрофреймворк и там можно легко и просто разобраться как это все работает.
PHP-DI - это отдельная библиотека реализующая IoC. на офф сайте в принципе и в документации достаточно примеров что бы понять суть как с ней работать. php-di.org
Хотел было найти статейку на тему построения web-приложений используя только декорацию и композицию классов, но чет запамятовал где видел....
CleverStyle CMS отделяет ядро от всего остального, и при этом очень шустрая (2-4 мс на ядро, остальное зависит от вас). Имеет все нужные абстракции, структуру, через готовые модули очень удобную поддержку Composer, Bower и NPM, при необходимости в наличии WebSockets и много другого. Есть примеры модулей, можно посмотреть и сделать то, что нужно именно вам.
Будут вопросы - пишите в личку или на GitHub, там же есть документация.
о кто-то такое даже реализовал. Это вообще отлично, жаль что к примеру пользователи, функционал апи, кеш и т.д. не выведен в отдельные модули. не всегда оно нужно на сайте.
Язык php, его я знаю лучше других, хотя и не так хорошо, как хотелось бы.
Люблю, когда люди, сами зная и публикуя ответ в вопросе, всё равно пытаются что-то узнать новое.
Могу предложить понимание структуры. Вот описание основ на русском. (надеюсь, что это поможет понять)
PS: Если хотите "чужой" в качестве двигателя к своему "скелету" - смотрите в сторону Laravel 5 (и бонусом видео-уроки).
И Laravel-хаб (с хабра)
Прошу прощения, но к чему это? Структуру в голове я себе идеально представляю, а вот реализовать не очень получается. Поэтому и пишу сюда, пытаясь просить совета у людей которые этим занимались или видели подобную реализацию. Не люблю людей, которы совершено не разбираясь в вопросе тыкают носом в мои же слова. О том что php я знаю не очень хорошо, я итак прекрасно понимаю, но если вы счетаете себя гуру программирования стоит подумать об этом лишний раз... Возможно не все так хорошо.
Павел Кузьмин: "Не люблю людей, которы совершено не разбираясь в вопросе тыкают носом в мои же слова." У меня есть собственный и продаваемый фреймворк и я отлично разбираюсь в этом вопросе.
xmoonlight: поздравлю, у меня есть 20 приложений для различных платформ, которые отлично продаются, дальше будем хвастаться? Каждый день выходят новый фреймворки я языки программирования, а также обновляют старые или полностью переписывают, утверждая что кто-то знает все он выглядит минимум глупо...
Павел Кузьмин: С чего Вы взяли, что я знаю всё?) Те, кто имеет возможность почитать в интернете и спрашивают очевидные вещи на тостере - выглядят минимум ЛЕНТЯЙКАМИ.
xmoonlight: вы пытаетесь тыкать меня в то, что я плохо знаю php и подкидываете картинки для тех, кто вчера открыл для себя программирование. Я же не говорю что не гуглил и не искал решения, нашел и даже несколько, но кто мне даст гарантию что через месяц это решение не начнет виснуть как вордпресс? Вот и хочу послушать мнения людей и их предложения. Возможно я что-то не нашел или пропустил или вообще наткнулся на бред из нулевых, который через час взломают. Я же не прошу мне написать весь код, лишь посоветовать в какую сторону смотреть и что лучше изучить для реализации подобного.
Сергей Протько: Верно! Картинка не раскрывает всю суть (так было задумано заранее), а служит для общего осмысления процесса взаимодействия в целом смотрящим на неё, заставляя немного подумать самому и сделать все грамотно - анти-"медвежья" услуга.
xmoonlight: ок, может это и так, но тогда у меня другой вопрос. Если есть такая картинка, значит кто-то пытался реализовать что-то подобное? Лучше бы посоветовали какие-то фреймворки, компоненты и т.д. Читать тонны книг и в конечном счете понять что мне не подходит это решение не очень хочется. Вот представьте месяц изучения оф. доков и в результате поиск другого фреймворка. Есть же люди которые отлично разбираются и уже изучали всю документацию и вполне могут рассказать о том, что я смогу сделать. Так вот за этим и пишу на тостер...
xmoonlight: о это действительно интересно, сижу уже 3 часа и изучаю все что накидали, Спасибо! Из-за прошлых проектов понял, нужно в первую очередь разобраться что вообще есть и что советуют люди. Иначе получится как с делфи, знаю на отлично и писал вообще все что можно, но сейчас даже не знаю зачем изучал, язык устарел, а то что они предлагают вообще маразм. Платить каждый год за апдейты, которые еще и глючные, ужасная идея... В общем буду дальше читать, пока пусть вопрос повисит, может еще будут советы!
xmoonlight: кстати 1 раз слышу про Laravel, но у него просто шикарнейшая документация и поддержка. Вообще не где такого не видел. Все бы фреймворки так поддерживали!
Почитайте про ООП в PHP и о паттерне MVC. На рутрекере были скринкасты о написании своей CMS. Там как раз про это. rutracker.org/forum/viewtopic.php?t=2828019
Рекомендую целиком смотреть, дабы пробелов не было.
ЗЫ
То, что там пишет автор, конечно не верх изящества, но зато дает понять основы.