Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
global $Config, $db, $L;
напомнило старую статью.run-tests.php писали разработчики PHP а не я, так что туда не лез.
Внутри используется composer, так как это единственных прямой и простой вариант подключить Ratchet, решил не выдумывать ничего и использовать как есть.
По поводу зависимостей — этого и не нужно делать, они будут обновлены вместе с самим модулем WebSockets, вы выберете в админке новый дистрибутив модуля WebSockets, кликните «обновить», и всё.
Файлы библиотек зашиты определённые, которые работают вместе без проблем, иногда для правильной работы или исправления библиотеки нужно патчить, зашивание вполне конкретных версий обеспечивает работоспособность.
Модуль хранит всё в себе, включая специфические зависимости (более общие, как WYSIWYG редактор выделены в отдельные модули/плагины) и исчезает бесследно и без мусора при удалении. Логично и удобно.
Для библиотек не нужно делать автозагрузчиков, вот и взял composer как есть
А по поводу автозагрузчика системы — он достаточно прост, но учитывает специфику размещения файлов в CleverStyle CMS.
если же втискать его в систему зависимостей CleverStyle CMS, то получится что я создам проблему, которую потом придется самому же и решать
В итоге для понимания что же в конце концов происходит нужно будет детально разобраться в устройстве composer, а потом в его интеграции в систему.
но иногда оптимальнее написать простенький велосипед конкретно под задачу без излишеств
Эм, я гденибудь упоминал этот файл? :)
А жаль, когда сталкиваетесь с новыми технологиями, стоит подумать, как они помогут в усовершенствовании чего либо в ваших проектах. Почитайте документацию, посмотрите как его используют, например, в последних фреймворках, пакетах и так далее./blockquote>
По-моему в контексте того, что вы процитировали не имеет смысла, похоже не то процитировали.
Это смотря как посмотреть и придумать реализацию. Дублирование пакетов в папке vendor обеспечено.
Не обеспечено, а вероятно. Более вероятные ситуации, как и упоминалось, выносятся в отдельные компоненты, кроме того при желании папка vendor в корне сайта и автозагрузчик composer так же подхватываются движком, можете указать там желаемые версии чего угодно.
Для патчинга библиотек надо слать pull-request'ы автору, а затем запустить composer update. Почитайте про semver и то, как можно получать только патчи (обратная совместимость сохраняется) ссылка на доку.
В других случаях применяют наследование, т.е. в папку vendor не лезут.
Спасибо за капитанский комментарий, можете посмотреть мою активность на GitHub. Уверен, вы будете удивлены сколько патчей я уже отправил, и сколько ещё висят. Но пока разработчик не просмотрит и не одобрит патч мне тоже как-то нужно работать, верно ведь?
за вас это давно сделали, зачем городить еще один велик в котором придется разбираться? Разработчику пишущему модуль куда логичнее и проще использовать то, что уже протещено многими людьми и то, что уже когдато изучил.
Так используйте, в чём проблема? Если вы смотрели на разные системы — они все устроены по разному, и нет единого способа установить TinyMCE, например, чтобы он работал в любом фреймворке и использовал все его возможности. Для каждого фреймворка/CMS есть своя прослойка для интеграции. Тут аналогичная прослойка, не более, не менее. Субъективно прослойка гораздо проще для понимания.
… ээм? Как это не нужно?
Я имел ввиду писать, загрузчики уже есть написаны, потому и был взят загрузчик, который сгенерировал composer.
суть совершенно не в этом. Я вам об одном, вы о другом. Посмотрите сначала стандарты psr-0 и psr-4. Подумайте, что реализовывать собственный автозагрузчик разработчику модуля будет лень, а пихать еще один композер внуть — как минимум, ужас принципа DRY.
Начнем с того, что я знаю что такое PSR-0 и PSR-4, продолжим с тем, что в абсолютном большинстве модулей загрузчика нет вообще, системного достаточно (посмотрите код, что ли), по поводу DRY — да, согласен, не красиво, но храня абсолютно независимые модули в разных папках иначе не получится (либо вы подкажете такой способ).
вы себе уже создали проблему, создав свой велосипед, вместо того, чтобы взять готовое и популярное решение :)
Покажите мне ОДНО единственное решение которое позволит так же быстро поднять аналогичный сервер веб-сокетов с автоматической аутентификацией и обработкой событий на сервере и клиенте, с отправкой сообщений из любого места серверного кода. Опустим за рамками поддержку нескольких серверов и удобство/простоту системы как таковой.
Мне кажется или это стоит делать с любым инструментом и техлогией?
Совершенно верно, но иногда нужно вникать в одну технологию, а иногда в одну, вторую, и то, как они взаимодействуют. Количество подводных камней и багов при этом умножается, чего я и стараюсь при возможности избегать.
вся cms сплошной велосипед :) код как минимум сложно читать, а про поддержку и добавление новых фитч, я вообще молчу. Тем более никто не говорит, под каждый чих искать вендора.
Любой фреймворк/CMS как минимум на половину велосипед (чаще почти полностью). Тем не менее на одном удобнее ездить чем на другом, хотя часто это субъективно. А про поддержку и добавление фич вы не можете говорить, не прочитав код (который GitHub форматирует криво), документацию, и не попробовав что-то реальное сделать. Это нормально, но только после этого вы сможете сравнить.
По-моему в контексте того, что вы процитировали не имеет смысла, похоже не то процитировали.
Не обеспечено, а вероятно. Более вероятные ситуации, как и упоминалось, выносятся в отдельные компоненты, кроме того при желании папка vendor в корне сайта и автозагрузчик composer так же подхватываются движком, можете указать там желаемые версии чего угодно.
Так используйте, в чём проблема? Если вы смотрели на разные системы — они все устроены по разному, и нет единого способа установить TinyMCE, например, чтобы он работал в любом фреймворке и использовал все его возможности. Для каждого фреймворка/CMS есть своя прослойка для интеграции. Тут аналогичная прослойка, не более, не менее. Субъективно прослойка гораздо проще для понимания.
Я имел ввиду писать, загрузчики уже есть написаны, потому и был взят загрузчик, который сгенерировал composer.
"autoload": {
"psr-4": {
"VendorName\\": "src/"
}
}
посмотрите код, что ли
либо вы подкажете такой способ
Покажите мне ОДНО единственное решение которое позволит так же быстро поднять аналогичный сервер веб-сокетов с автоматической аутентификацией и обработкой событий на сервере и клиенте, с отправкой сообщений из любого места серверного кода.
Совершенно верно, но иногда нужно вникать в одну технологию, а иногда в одну, вторую, и то, как они взаимодействуют. Количество подводных камней и багов при этом умножается, чего я и стараюсь при возможности избегать.
Любой фреймворк/CMS как минимум на половину велосипед (чаще почти полностью).
А про поддержку и добавление фич вы не можете говорить, не прочитав код
Любой фреймворк/CMS как минимум на половину велосипед (чаще почти полностью).
дык, а зачем какие компоненты композера выносить глобально, а какие-то нет? Не проще ли разработчику модуля указать, какие зависимости требуется для его работы? А затем дело за вами, вы их подгрузите и установите в одну-единственную папку vendor.
К томуже, тотже разработчик, может в модуле наследовать и изменить, если надо нужные компоненты из композера.
Профит.
Единый способ установки «TinyMCE чтобы он работал в любом фреймворке и использовал все его возможности» описан на главной странице гитхаба редактора.
? Получается, мы выбросили на помойку 1 свой велосипед, предотвратили создание новых (например в модуле, своя либа, которую автолоадер cms не подгрузил) в модуле, а также, если использовать пакеты композера глобально, не создаем лишних папок vendor опять же в модулях.
Смотрите внимательнее => «если же втискать его в систему зависимостей CleverStyle CMS, то получится что я создам проблему, которую потом придется самому же и решать»
ответ дал выше.
Избегать как, своим велосипедом?
Это не оправдание писать свои велосипеды.
Смотрел. Очередной жестко зашитый вендор в ядре оО… своя реализация кеширования, работы с базой и так далее… чем не устроили готовые и стабильные варианты? Использовать тот же stash, к которому есть уже написанная документация и армия разработчиков умеющих его использовать. Фигак и у вас новый контрибутор помогающий в разработке. Смекаете?
function getUserInfo($userId)
{
$pool = $this->cachePool;
// Get a Stash object from the cache pool.
$item = $pool->getItem('user', $userId, 'info');
// Get the date from it, if any happens to be there.
$userInfo = $item->get();
// Check to see if the cache missed, which could mean that it either
// didn't exist or was stale.
if($item->isMiss())
{
// Run the relatively expensive code.
$userInfo = loadUserInfoFromDatabase($userId);
// Store the expensive code so the next time it doesn't miss.
$item->set($userInfo);
}
return $userInfo;
}
function getUserInfo($userId) {
$userId = (int)$userId;
return $this->cache->get("$userId/info", function () use ($userId) {
// Run the relatively expensive code.
return loadUserInfoFromDatabase($userId);
}
}
А вы смотрели код? Laravel 5, например.
illuminate/cache
Так в том то и дело, что composer не является обязательным, это частный случай. В вашем случае я должен взять composer «потому что это современно и круто», сделать над ним обертку и вручную манипулировать этой кухней вместо того, чтобы просто положить библиотеку в папку модуля. Composer это круто, но это не повод совать его туда, где он не совсем вписывается.
Вы не знакомы с архитектурой, и от этого не понимаете что иногда кроме просто распаковки файлов нужно сделать ещё некоторые операции, и это весьма распространено если мы имеем дело не просто с библиотекой.
А еще есть обновление компонентов, в которых не всегда одной лишь миграцией структуры БД можно обойтись, и для всего этого придется писать столько клея, что вы потеряетесь в дебрях что и откуда запускается, кто кого вызывает, и что вообще происходит.
Спасибо за ответ, такого простого решения просто нет, либо вы о нем не знаете.
По вашему мы должны взять composer, прописать зависимости, подключить фреймворк, написать немного клея, и если повезет то в течении суток получим франкенштейна, который маловероятно будет лучше.
Совершенно верно, если выбирать строить велосипед вокруг большого проверенного решения (его-то нужно интегрировать) либо просто небольшой велосипедик — то однозначно второе.
Напишу вам аналог примера из документации stash (никогда раньше не стыкался)
function getUserInfo($userId) {
$item = $this->cachePool->getItem('user', $userId, 'info');
$userInfo = $item->get();
if($item->isMiss()) {
$userInfo = loadUserInfoFromDatabase($userId);
$item->set($userInfo);
}
return $userInfo;
}
Угадайте, на какой кухне это приготовили? Угадайте, используют ли это в Symfony, Zend, Kohana, etc?
Каждый пишет свою, якобы абсолютно независимую decoupled реализацию, которая тем не менее лучше всего подходит к вполне конкретному фреймворку, где, собственно, и используется
Используя композер, можно тоже положить папку в модуль, а затем в админке запустить установку. Впрочем, все зависит от того, где будет cms работать, на обычных шаред-хостингах или например, на vps'ке.
Как это относится к устранению лишних автозагрузчиков? Распаковка файлов модуля никак не мешает.
У такого подхода есть существенные плюсы: поддержка огромного сообщества, баг фиксы, апдейты системы и я уже не говорю о том, что есть армия разработчиков знающих этот фреймворк и автоматом понимающих архитектуру (при необходимости лезть в код). Да и к тому-же, разработчик подобного «франкенштейна» не сосредотачивается на своих велосипедах, а использование готовых инструментов позволяет сосредоточится на решении проблем пользователей.
зачем стоить велосипед вокруг большого проверенного решения? просто используйте его. Можно делать врапперы для удобства. Больше то зачем?
К велосипедику со временем возрастает кол-во требований и послепенно добавляется еще куча лапши, которую сложно поддерживать. Свои решение должны быть, но еще раз говорю, на каждый чих вендора не ищут.
Смекаю :)
А вообще, сравнение не верное. В вашем варианте, если кеш закончится, он всегда будет браться из базы (или по крайней мере я не вижу явного сохранения). К томуже, если важно сократить кол-ва кода, напишите враппер. И вуаяля, за полчасика у вас есть готовое кеширование в CMS. В чем преимущество своего велика?
Посмотрите, как Laravel, Kohana используют компоненты симфони.
Любой компонент современного фреймворка можно поставить себе без проблем. Но суть совершенно не в этом. Мы же решаем проблемы людей, которые используют cms, так зачем тратить время на создание не проверенных временем и сообществом инструментов?
Как я интегрировал WebSockets в существующую систему на PHP