Jump to content

Recommended Posts

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

 

$query = db()->builder->from('_products')->where(...)

echo (string) clone $query
$count = (clone $query)->count()
$products = $query->all()

 

Но основной сложностью все же универсальность самих методов. ели уж и подключать то вероятнее то что понадобится и в последствии если работать в более серьезных проэктах. 

 

а так то хватает пакетов 

 

тут вообще актив рекорд, тразакции https://packagist.org/packages/voku/simple-mysqli есть свежие коммиты на гите

Edited by DaVinci
Link to post
Share on other sites
  • Replies 236
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

+1

огромное число разработчиков работают с ним

 

сейчас подключил от ларавеля контейнер, протестировать, и о чудо все работаете как и прежде!)))

 

но это как то не интересно, согласованность интерфейса это говно, так и работы не останется если в один клик можно подменить любой компонент, главное заказчикам не рассказывать -  делать задумчивый вид глядя в экран и чесать затылок мол все тут очень сложно))))

Edited by DaVinci
Link to post
Share on other sites

================================================

 

залил конфигурацию с контейнером от ларавеля

 

https://github.com/simpladevru/simpla-namespace/blob/test-container/api/Simpla.php

 

в качестве примера конфигурацию Storage для settings изменил

 

https://github.com/simpladevru/simpla-namespace/blob/596e5cb29d43bd80cfc12a43a2a3d2147604bf47/api/Simpla.php#L65

public function set_settings_storage()
{
    static::$container->singleton(
        StorageSettingInterface::class, SettingsDbStorage::class 
    );
}

 

теперь если посмотреть на сам Settings https://github.com/simpladevru/simpla-namespace/blob/test-container/api/components/settings/Settings.php

 

в конструкторе ми подтягиваем StorageSettingInterface но нигде не создаем сам клас Storage которому в свою очередь в конструкторе нужен класс Database https://github.com/simpladevru/simpla-namespace/blob/test-container/api/components/settings/SettingsDbStorage.php#L16 все засасывается автоматом в тот момент когда будет запрошен settings

 

НЕТ нигде магии Аля this->db (ОТКУДА ТЫ ВЗЯЛСЯ?), requere, extends и прочей чуши. чистый, понятный код...

Edited by DaVinci
Link to post
Share on other sites

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

 

ну собственно сложности на самом деле нет. конфигурация все та же, все тот же список api, разработчику желательно конечно знать как устроена ядро но совсем не обязательно. по такой схеме работают все фреймворки а следовательно работа с сиплой в таком ключе будет перспективной - практика работы с ней пригодится в любых других проэктах. единственно что надо знать что существует контейнер в котором лежат нужные запчасти и что обратится к ним можно с любой точки приложения удобный способом а их несколько, без наследования и привязки к конкретной реализации определенного компонента.

Edited by DaVinci
Link to post
Share on other sites

================================================

 

тестирую, поделюсь результатами)) 

 

Перед нами стоит задача переделать место хранение корзины - в редисе, куках, в лк пользователя... где угодно. Не сложно, сложнее не остаться единственным человеком который понимает что происходит в коде)) что бы владелец не разорился на доработке от Корса и что бы сайт не падал после косяка

 

первым делом я прошел по классу корзины и выделил все места которые взаимодействуют с сессией в отдельный интерфейс

 

https://github.com/simpladevru/simpla-namespace/blob/test-container/api/components/cart/base/CartStorageInterface.php

 

потом создал класс для Storage, просто скопировал методы с интерфейса и описал их https://github.com/simpladevru/simpla-namespace/blob/test-container/api/components/cart/base/CartSessionStorage.php по хоршему этот storage не должен на прямую работать с сессиями потому в качестве примера в конструкторе подтянул класс сессии...

 

Потом подумал что и сама корзина собственно может быть переписана, потому создал для данной реализации отдельную директорию, любые другие корзины можно положить рядом а еще лучше написать для КОРЗИНЫ интерфейс... https://github.com/simpladevru/simpla-namespace/tree/test-container/api/components/cart/base

 

После зарегистрировал сервис и Storage https://github.com/simpladevru/simpla-namespace/blob/e5ee2fb9d2016a250a6f74e8801f07be1ef7540b/api/Simpla.php#L71

 

на переделку ушло 2 часа, не все гладко, это пример... на создание Storage потратил 5 минут, там делать нечего... 

 

ЧТО в итоге - методы интерфейса понятны и легко читаются, за что они отвечают видно сходу, любому последующему программисту просто даже ДУМАТЬ не надо как все делать - у него уже есть готовые методы для того что бы просто описать их.... Ни в корзину и куда еще либо даже лазить не надо... Вообщем как по мне удобно)))

 

Теперь если когда нибудь корс опубликует свои пакеты Storage корзины в куках я смогу подтянуть их и автоматически обновлять. Про то что бы перебрасывать что либо по фтп можно просто забыть...)))

 

 

Edited by DaVinci
Link to post
Share on other sites

поразмышлял на счет базы, собственно единственный вменяемый, не костыльный способ работать с разными базами и собственно "быть в тренде" это PDO. вероятнее всего... возможно эксперты в этой области меня поправят...

Edited by DaVinci
Link to post
Share on other sites

Теперь если когда нибудь корс опубликует свои пакеты Storage корзины в куках я смогу подтянуть их и автоматически обновлять. Про то что бы перебрасывать что либо по фтп можно просто забыть...)))

 

Попробуем немного помечтать

1. Некто Корс опубликовал свои пакеты.

2. DaVinci получил от заказчика заявку - можно ли сделать то-то и то-то. Стал искать по пакетам - о счастье, есть пакет с почти готовым функционалом, как надо. Но заказчику, конечно, об этом не сказал,  сделал задумчивый вид, глядя в экран и почесывая затылок,  мол, все тут очень сложно, и цену загнул соответственно. А заказчику надо - согласился.

3. DaVinci за пару минут устроил все, затянул разработки Корса. Теперь у заказчика все прекрасно работет, DaVinci побогател, все довольны. Красота!

4. Через некоторое время Корс свой пакет изменил, и к заказчику он теперь тянется в измененном виде. А среди изменений появился и некий хакерский инструмент, чтоб у заказчика стянуть базу или скрипты или что еще. И этот нехороший Корс получил все сведения о сайте. А там могут быть и пароли доступа к финансовым инструментам или много чего еще конфиденциального.

Стало быть, с помощью DaVinci у заказчика ушли на сторону все коммерческие и прочие тайны.

5. Свои хакерские штучки Корс может подключать не постоянно, а изредка на короткие периоды. А отловить его будет довольно проблемно. А если даже и отловят, что будет? Допустим, удалят пакет из репозитория. На сайте доработка действовать не будет. А может, и сайт зависнет крепко.  Заказчик - к DaVinci - выручай, друг. Что будет делать DaVinci? Другой аналогичный пакет искать, или свой писать? И как - бесплатно или новую оплату загнет?

6. Возможны и еще разные варианты...

Edited by phukortsin
Link to post
Share on other sites

Жуткий рассказ))) если бы вы понимали суть абсурдности того что вы написали... стало быть гитхаб свалка хакерского шлака который в тот или иной момент может стянуть все ваши пароли)))) собственно сама Симпла именно там и лежит))

 

Страшно аж жуть....

Link to post
Share on other sites

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

 

Вероятность того что в пакете могут подсадить вредоносный когд есть, но для этого есть версианирование что сводит риски к нулю. Даже не представляю дурочка который принимает на свой сервер гигабайты статистики с чужих серверов для аналитики в ожидании того что бы ТОТ самый ОДИН заказчик закачал обновление что бы украсть у него пароли))) ПЛЮС пакеты проверяются тысячами пользователей в отдельной случае миллионами (ни одна cms не может похвастаться такой армией тестировщиков к вашему сведению) что дает возможность обнаружить любые огрехи. Можно приводить много доводов в пользу абсурдности ваших аргументов но ВАМ сперва бы понять о чем вы говорите....

 

А вот то что такой злобный тролль как КОРС подсадит вредоносный код в чужой проект гораздо выше, существеннее выше. А кому тестировать??? ))) Только вы знаете что вы там делаете, ваши работы никем не критикуются и не корректируются. А в свете вашей загруженности если у 10 ваших заказчиков обнаружится вредоносный код, даже если вы не знаете что прилетел он с вашего компьютера, получается кому то надо будет м]гко говоря подождать что бы у вас появилось время все исправить  :D  а тем временем как КОРС хаотично бегает по серверам заказчиков в тщетных попытках все исправить кто то несет убытки. а почему так получается? А потому что КОРС ОДИН и больше НИКТО не знает как устроен его код)))) И собственно из тех кто мог бы что то сделать не полезет в код симплы тем более исправлять чужие косяки... И если он не может установить компазер то с консолью у него беда.. логи то он через фтп смотрит... откатить ничего не может... Вообщем беда...

 

И прошу вас в очередной раз - хотите поговорить о безопастности создайте ОТДЕЛЬНУЮ ветку. У вас с понимаем очень плохо... Еще немного и мы начнем говорить о том что бы пришельцы не украли пароли пользователей потому что интернет создан марсианами. КЛИНИКА...

Edited by DaVinci
Link to post
Share on other sites

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

 

Вы против внешних пакетов, я понял, все поняли. Помимо этого есть тема программирование ядра - посмотрите сколько сервисов api висит в репозитории, может подскажите как организовать мост для двух типов подключения к базе, можете написать класс для работы с сессиями, куками. Отправляйте пул, я приму. Вам это не интересно по каким то причинам? ну так если уж заходите в тему то хоть сидите молча

Edited by DaVinci
Link to post
Share on other sites

================================================

 

обкатал внедрение зависимостей, удалил контейнер от ларавель установил свой, все работает как и прежде

 

перебросил ветку тест на мастер

 

собственно на этом Мое предложение по развитию симплы в ключе неймспеса закончено. Надеюсь кто следил было интересно и возможно познавательно. Вероятнее всего мой вклад в развитие симплы в данной теме был не настолько весомый как вклад Корса, но все же я старался))

 

приложение не готово, если кому интересно можете поэксперементировать и удостовериться что работать с такой инфраструктурой реально удобно

 

данная работа это не готовое решение.

 

================================================

 

что удалось получить на выходе 

 

- подключили композер, автозагрузку классов, формируем наше приложение как удобно с любыми влажностями не задумываясь об requere, подключаем сторонние пакеты такие как smarty, все возможные библиотеки такие как curl, pclzip

 

- установили контейнер, вместо "глупого" массива из классов теперь есть мощный инструмент внедрения зависимостей. переоценить его достоинства и удобства просто не возможно. всем кому интересно и кто еще не знает что это можно почитать про Di контейнер и Service Locator. Безумно удобная штука, всеядная, можно хранить от простых строк, массивов, объектов до внедрения объектное в конструктор класса... вообщем круть да и только. 

 

- перевели базу на InnoDB что существенно облегчит жизнь при разработке

 

- в качестве примера сконфигурировали Storage для корзины и настроек 

 

--------------

 

по данной теме у меня все, если будет чем дополнить по namespace отпишусь.

 

--------------

 

КОРС

 

Специально для тебя залил папку вендор которую ты не видел. не переживай, там два пакета которые уже были в симпле. я ничего не подсаживал туда.

 

а дамп базы тут https://github.com/simpladevru/simpla-namespace/blob/test-container/simpla/update/simpla.sql

 

--------------

 

следующая тема скорее всего будет именно про компоненты. надеюсь все противники пакетов, модульности и прочих удаленных ресурсов а так же общество нормальных людей, не загадят тему  :D

Edited by DaVinci
Link to post
Share on other sites

В этой теме в постах #19, #44 предлагались некоторые из актуальных для Simpla задачи. Ни одну из них, насколько я понял, обсуждаемая разработка помочь решить простым способом не может. Попробую предложить еще:

7. Сделать кеширование SQL-запросов. Вот недавно пользователь интересовался

http://forum.simplacms.ru/index.php?app=core&module=search&do=viewNewContent&search_app=forums
А вообще вопрос интересный, актуальный и на форуме всплывает время от времени.

Может, обсуждаемая разработка может этот вопрос разрешить. Желательно легко и просто - чтоб простому пользователю скопировать пяток магических строк в composer.json - и все заработало...

 

DaVinci, прошу Вас не волноваться и не переживать, если мой пост не понравится.

Также, пожалуйста, не трудитесь и не просите меня не писать в теме. Просьбы такого плана считаю глуповатыми, ибо это открытый форум для обсуждения всеми желающими. Поскольку Вы создали тему на открытом форуме, такие претензии  неуместны.

 

Кроме того, пожалуйста, учтите, что я пишу в открытой теме ВСЕМ заинтересованным, а не только Вам одному. Как говорил один киногерой, "Не считайте себя фигурой, равной Черчиллю"...

 

Уж извините, мне (думаю, и другим тоже) по большому счету все равно, дадите содержательный ответ на вопрос персонально Вы или это сделает кто другой...  Мой пост - вопрос для тех кто знает. Если вдруг Вам затруднительно содержательно  решить мой вопрос, просьба не волноваться и не писать не по делу. Расписывать вместо точного ответа достоинства Вашей работы тоже не надо - они понятны, признаны и неоспоримы.

Link to post
Share on other sites

Если бы вы были повнимательнее то увидели бы заголовок темы. И вопрос по данной теме решён. Теперь вы как разрабочик можете подключать любые пакеты, а уж такие вещи как кеширование запросов просто детский сад.

Link to post
Share on other sites

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

Edited by DaVinci
Link to post
Share on other sites

Если бы вы были повнимательнее то увидели бы заголовок темы. И вопрос по данной теме решён.

 

Согласен, вопрос по данной теме решён.

Стало быть, вопрос у меня не прямо по теме, а чуть расширенный - по применению описанного решения.

 

...а уж такие вещи как кеширование запросов просто детский сад.

 

Чудно! А может кто-то написать кратко и точное решение, понятное не особо подготовленному пользователю? Если я правильно понимаю, то должно быть несколько строк для вставки в composer.json - и больше никаких хлопот владельцу сайта...

 

Еще раз повторюсь - вопрос не предназначен персонально для ТС. Буду рад получить содержательный ответ от любого, кто знает...

 

Если для ТС трудно или не интересно дать ответ на детский вопрос, просьба не волноваться, к ТС никаких претензий нет, разработка однозначно ценная и полезная.

 

 

 

Link to post
Share on other sites
  • 2 weeks later...

DaVinci, на php 7.2 открой админку посмотри на ошибки.

 

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

Link to post
Share on other sites
  • 1 month later...

В качестве примера добавил Pipeline

 

https://github.com/simpladevru/simpla-namespace/blob/pipeline/index.php

 

конечно надо привести к должному виду IndexView. Но думаю суть понятна.

 

Что стоит отметить

https://github.com/simpladevru/simpla-namespace/blob/pipeline/middleware/CheckLicenseMiddleware.php

по умолчанию, проверка лицензии используется в двух местах. Имея один посредник мы избавились от дублирования

 

https://github.com/simpladevru/simpla-namespace/blob/pipeline/middleware/TimerMiddleware.php

можем использовать сколько угодна раз и оборачивать любые последующие посредники

 

=============================================

 

само собой для полноценной реализации не хватает два объекта request и response. 

 

https://docs.zendframework.com/zend-diactoros/

https://www.php-fig.org/psr/psr-7/

Edited by DaVinci
Link to post
Share on other sites

Что стоит отметить

https://github.com/simpladevru/simpla-namespace/blob/pipeline/middleware/CheckLicenseMiddleware.php

по умолчанию, проверка лицензии используется в двух местах. Имея один посредник мы избавились от дублирования

 

Избавились от дублирования - это плюс.

 

Но работа с лицензией в стандартной Simpla в двух местах - на витрине и в админке - проводится по разному. В одном месте при отсутствии лицензии просто текст пишется и работает полностью, а в другом - админка не открывается и редиректит на страницу ошибки лицензии.

 

В предложенном варианте, если я правильно понимаю, такой гибкости нет. 

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

 

И даже насчет "избавились от дублирования" тоже не совсем понятно. По данной ссылке в IndexAdmin.php стоит стандартная проверка лицензии, которая дублирует CheckLicenseMiddleware.php.

Link to post
Share on other sites

 Например, чтобы при отсутствии лицензии отключался импорт или импорт работал лишь с первыми 10 строками...

 

код, логику, любой сложности на проверку стоит ли отключить импорт при тех или иных условий или сколько строк можно импортировать я вынесу в посредник, а сам код импорта как и положенно останется "чистым". Возможно в нем появятся переменные, но это не усложнит поддержку самого импорта. 

 

Вам скорее всего тяжело в это поверить... 

Edited by DaVinci
Link to post
Share on other sites

 

CheckLicenseMiddleware.

Быть может вы не заметили ещё одного преимущества - говоря о CheckLicenseMiddleware мы уже не говорим о «каких то строчках кода, которые находятся в каких то файлах», мы говорим о логике, какой бы она не была, вынесенной в отдельное место. И читая имя данного посредника даже не открывая этот файл понятно для чего он нужен Edited by DaVinci
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...