• Выбор платформы для сайта подобие фл.ру?

    Ahen
    @Ahen
    Универсальный дилетант
    Выбирать то, с чем умеет работать команда разработки.
    Преимущественно фреймворки.
    Брать цмс - ерунда какая-то, но вот ребята из WP сделали https://5bucks.ru/
    Ответ написан
    Комментировать
  • Насколько у меня правильный код ООП php?

    @D3lphi
    Здесь плохо всё, к сожалению.

    Начнем с того, что вы неверно наследуете классы. Почему у вас класс, отвечающий за подключение к базе данных является родителем класса, работающим с заказами? Наследование применяется, если можно сказать, что что-то является чем-то. Например, разработчик является работником; компьютер является устройством и тд. Здесь же у вас вообще близко такой логике не получится следовать. Вы должны передавать хотя бы объект для работы с бд через инъекцию, например, в конструктор. В идеале, нужно использовать паттерн репозиторий для работы с базой данных.

    Класс SearchOrder у вас не только выполняет запросы, но еще и работает с данными, хранит состояние этих самых данных, фильтрует данные (strip_tags()). Непорядок. Это все нужно разделять. У вас вообще получаются какие-то богообъекты, которые умеют во все.

    Вы каждый раз повторяете строки с подготовкой запроса, биндингом параметров, отправкой запроса и тд. Не думали, что неплохо бы было написать какую-нибудь обертку и выполнять запросы как-нибудь так:
    $result = $wrapper->select("SELECT * FROM `tablename` WHERE `id` = :id", ['id' => 5]);

    ?

    Вы вызываете connect() в методах. То есть, каждый вызов этого метода будет приводить к установке нового соединения с базой данных, даже если оно уже было установлено. Соединение с базой данных это достаточно дорогостоящая операция.

    Зачем вы используете свойства, если можно обойтись обычными локальными переменными:
    $this->orderID = (int) strip_tags($orderID);
    $this->column = (string) strip_tags($column);
    $this->value = (string) strip_tags($value);

    ?

    Почему вы стриппите тэги у идентификатора? вы настолько не уверены в том, что влетает в функцию:
    strip_tags($orderID);
    ?

    Если вы не используете php 7 и, как следствие, скалярный тайпхинтинг, то должны делать проверки на тип входящего аргумента. Если что-то не так с типом, бросаем исключение (А не приводим его к нужному)! Например:
    if (!is_string($arg)) {
        throw new InvalidArgumentTypeException('string', $arg);
    }

    Это в идеале. Вы не обязаны это делать, конечно же. Но вот такие проверки делают приложение безопаснее. Хотя, опять же, повторюсь, в 2017 нужно начинать новые проекты на php 7.1+.

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

    Кроме всего прочего, почитайте про стандарты оформления кода. Вы им не следуете.

    Вам пока рано писать такие велосипеды. Судя по всему, у вас нет опыта вообще. Посмотрите готовые решения: фреймворки, ORM, изучите их, хотя бы поверхностно разберитесь, как оно работает и уже потом пробуйте что-то сделать, исходя из полученных знаний.

    Желаю успехов!
    Ответ написан
    1 комментарий
  • Насколько у меня правильный код ООП php?

    customtema
    @customtema
    arint.ru
    $props = array(
         'orderID' => 'int',
         'orderID' => 'string',
         'value' => 'string',
    );
    
    foreach ($props as $value => $type)
    {
         $this->$value = ($type) strip_tags($value);
    }


    ;)

    А если серьезно - просто подсмотрите, как у других сделано.
    Ответ написан
    Комментировать
  • Насколько у меня правильный код ООП php?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    вообще не правильный, не должно быть наследования, инъекция зависимости должна быть
    Ответ написан
    Комментировать
  • Насколько у меня правильный код ООП php?

    GM_pAnda
    @GM_pAnda
    Бездельник
    Почитайте документацию про PSR-4, станет потом более понятно про все именования и тд
    Ответ написан
    1 комментарий
  • Онлайн блокнот для заметок?

    Afres
    @Afres
    Product Owner
    Может кому еще актуален ответ на данный вопрос, как и мне.
    У гугла новый хороший сервис https://keep.google.com/
    Есть так же приложение под андроид.
    Ответ написан
    Комментировать
  • Как сделать разлет картинок из центра по краям после задержки?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    Если вы хорошо владеете javascript, то предлагаю воспользоваться "Зелёным Шоком"
    Этот фреймворк делает различные сложные анимации, может пригодится во многих интересных и сложных проектах, на ютубе есть много видео о нём, хоть и на английском, но у них полно примеров на codepen, так что - Welcome )))

    https://greensock.com
    Ответ написан
    3 комментария
  • Как осуществить такую анимацию?

    Eridani
    @Eridani
    Мимо проходил
    Particle JS
    Ответ написан
    Комментировать
  • Как осуществить такую анимацию?

    Finesse
    @Finesse
    Через <canvas>. Программирование производится с помощью JavaScript. Схема примерно такая:
    1. На то место, где должен быть эффект, помещается canvas, который занимает всю площадь места.
    2. В памяти генерируется набор случайных точек со своим вектором скорости.
    3. В каждом кадре анимации точки сдвигаются в соответствии в вектором скорости.
    4. В каждом кадре анимации точки отрисовываются на canvas. Дополнительно проводятся линии между всеми парами точек, между которыми расстояние меньше определённого значения.

    Есть готовая библиотека для создания таких анимаций.
    Ответ написан
    Комментировать
  • Какой шаблонизатор для PHP выбрать?

    zooks
    @zooks
    Frontend
    Подтверждаю, Twig хорош. Если вы используете Laravel, но лень прикручивать Twig, тогда Blade.
    Ответ написан
    Комментировать
  • Какой шаблонизатор для PHP выбрать?

    DevMan
    @DevMan
    Где можно выиграть по скорости (и нужно ли)?
    по скорости быстрее будет чистый пых.
    только быстрее он будет совсем незначительно: чтоб шаблонизатор стал узким горлышком надо очень сильно постараться набыдлить.
    иными словами - аспект скорости можно вообще не рассматривать.

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

    какой использовать - дело вкуса. я предпочитаю django-подобный синтаксис, поэтому использую twig.

    ну и если из шаблона можно дропнуть базу - это что угодно, только не шаблон. это к вопросу "нужен ли шаблонизатор".
    Ответ написан
    4 комментария
  • Какой шаблонизатор для PHP выбрать?

    rework
    @rework
    Помог ответ? В благодарность отметь его решением
    TWIG ( https://twig.symfony.com/ ) - хороший шаблонизатор. Использовал его когда-то при разработке своего фреймворка на PHP
    Ответ написан
    6 комментариев
  • Кто писал свою CMS?

    Epsiloncool
    @Epsiloncool
    Программер, веб-девелопер, гейм-девелопер
    Да, писал на базе PHP. Основной идеей была модульность и автоматическое отслеживание изменений.

    1) Какой системой вдохновлялись или брали за образец?

    Никакой, считал все остальные CMS "недосистемами", недостойными подражания.

    2) Писали ли к ней инсталятор или предполагался другой способ установки?

    Нет, предполагалось, что это PHP скрипт, который начинает работать сразу после установки.

    3) Какой использовали визуальный редактор для админки? Один из 2 известных, что-то другое, или свой?

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

    4) Была ли у неё какая-то специализация - магазины, визитки, лендинги, что-то ещё?

    Нет, модульность подразумевала полную универсальность.

    5) Разделяли ли ядро и дополнительные модули?

    Да, ядро было небольшим, весь функционал был (предполагался) в модулях.

    6) Предусматривалась ли какая-то система шаблонов? (юзали ли шаблонизатор или на php)?

    Да, в качестве шаблонизатора для страниц можно было использовать plain-php или smarty-шаблонизацию.

    - Ну и если есть ссылки на репозитории кидайте кому не стыдно показать если в открытом доступе у вас.

    Нет таких ссылок. На самом деле довольно большой продукт - моя собственная CMS (который я делал 4 года) был банально смыт в унитаз, а 8 сайтов, сделанные на его базе были переделаны под другую популярную CMS и ничего от этого не потеряли, а даже приобрели.

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

    Нужно было просто посмотреть существующие CMS и использовать одну из них. Жаль потерянных лет.
    Ответ написан
    Комментировать
  • С чего начать при изучении symfony с нуля?

    Я начал с перевода статей можете почитать, если интересно. У Symfony хорошая документация, если какая-то специфическая задача то в гугле можно найти ответы на практически все вопросы + куча видео в youtube и конечно надо учить Doctrine ещё. Различия между 2 и 3 версией незначительны, обращайте внимание на совместимость бандлов с вашей версией Symfony. Удачи
    Ответ написан
    1 комментарий
  • С чего начать при изучении symfony с нуля?

    @pashalim
    Не так давно наткнулся на официальное демо приложение Symfony: symfony.com/blog/symfony-demo-1-0-0-released Интересно было посмотреть на практики самих разработчиков.
    Ответ написан
    1 комментарий
  • С чего начать при изучении symfony с нуля?

    alex_dm
    @alex_dm
    Лучше всего начинать здесь:
    https://knpuniversity.com/tracks/symfony
    первый курс бесплатный, если понравится, доступ к остальным 24$/месяц.
    Ответ написан
    Комментировать
  • С чего начать при изучении symfony с нуля?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Если с ООП на ты, то проблем возникнуть не должно.
    Для начала вам требуется понять саму архитектуру симфони.
    Далее уже переходить к пакетам которые в нее входят.
    В частности Symfony\Component\HttpFoundation, Doctrine, Yml, Twig
    Сервисы, что это и с чем едят.
    Создание кастомных реквестов для api.

    80% информации имеется в документации, остальное в гугл.
    Благо в поисковике множество информации на любые темы относительно симфони.

    Я бы еще определился, как вы собираетесь делать проект.
    SPA/Rest API или все в кучу по классической схеме симфони (контроллер->метод->сервис->ответ->твиг).
    Ответ написан
    Комментировать
  • Как правильно работать с объектами выборки doctrine в Symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    дополню ответ Юрий

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


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

    По поводу коллекций, в Doctrine есть такая штука как Collection. Вы должны понимать что в доктрине вы оперируете не табличками в базе, а объектами. Строите именно объектную модель вашей системы. В этом ключе можете почитать что такое "агрегат сущностей". В вашем случае у вас агрегат будет состоять из двух сущностей. Product и его Image. Например если вы захотите сделать добавление картинок, вы можете сделать так:

    /**
     * usage: $product->addImage($image);
     */
    public function addImage(Image $image)
    {
        $this->images->add($image);
    }


    А коллекция сама выполнит persist новой сущности. Таким образом количество репозиториев уменьшается до количества корней агрегатов сущностей. В вашем примере "корнем", то есть вершиной графа взаимоотношений объектов в контексте продуктов, является сам продукт. А потому репозиторий мы будем делать только для продуктов. Все остальное внутри оного разруливается либо при помощи коллекций.

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

    К примеру "новички" в доктрине любят персисть сущность даже для обновления. Они путают `persist` и `save`. Так вот, если вы загрузили сущность из базы через доктрину, то сущность уже попадает в unit of work. И делать persist уже не нужно, этот метод только для того чтобы доктрина узнала о чем-то новом. А так она и так знает про эту сущность. В итоге вы можете просто что-то поменять и вызвать flush. То есть репозиторий - это тупо хранилище. Хранилище умеет хранить. Изменять то, что оно хранит оно не может.

    Так же рекомендую на тему репозиториев почитать это:

    www.whitewashing.de/2013/03/04/doctrine_repositori...

    Ну и в целом.

    https://www.youtube.com/watch?v=rzGeNYC3oz0 - доклад о том как готовить доктрину от авторов оной.

    От себя лишь добавлю простые правила:

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

    что очень сильно срет память.


    Доктрина гарантирует вам что в памяти будет всегда только один инстанс сущности. То есть если у вас есть 10 объектов одного типа и имеющих один объект, это все будут ссылки на одну сущность. В вашем случае у вас просто циклическая ссылка между продуктами и изображениями. dump циклические ссылки не особо умеет.

    Это логичное ограничение, дабы не возникало ситуаций что вы обновили что-то в одном экземпляре сущности и что-то в другом, и в базу попадут только часть изменений. За подробностями - читайте документацию к доктрине в отношении UnitOrWork и Identity Map.
    Ответ написан
  • Symfony, что такого сделать джуниору?

    GTRxShock
    @GTRxShock
    SA
    https://habrahabr.ru/post/301760/

    потом можно запилить систему учета обращений, с наглядной статистикой, печатью бланков, можно внедрить разделение ролей менеджер/сотрудник. Потом с наработками идете в ближайшую аутсорс компанию и забываете о возможности задавать вопросы, по причине полной занятости :D
    Ответ написан
    Комментировать
  • Какой функционал необходимо сделать на yii2, чтобы работодателю было понятно, что я с ним знаком?

    @hufawoso
    Все верно, т.к. сегодня yii есть, а завтра его перестанут поддерживать и нужно будет писать на другом фреймворке.
    Поэтому работодатели в первую очередь смотрят знание нативного php, умение находить решения, и общую адекватность человека.
    Ответ написан
    Комментировать