• Как реализовать Корзину товаров с помощью PHP?

    mitaichik
    @mitaichik
    Ответ написан
    Комментировать
  • Как лучше писать if условия?

    mitaichik
    @mitaichik
    1. Согласен с тем что выходить нужно как можно быстрее. Поэтому лучше как-то так:
    if(foo != bar || foo < 1) {
      return false;
    }
    // логика
    return true;


    2. Деление условий должно быть осмысленно с точки зрения бизнес-логики. Если условие foo != bar || foo < 1 является целостным и неделимым с точки зрения бизнес логики, то лучше его не делить.

    Если же это 2 разных условия (две разных ситуции), просто скомпонованных в одно условие, то вполне допустимо их разделить для логического выделения (опять таки с точки зрения бизнес-логики). Например, если foo - кол-во товаров в заказе, a bar - кол-во товаров при котором дается скидка (не больше не меньше):

    // кол-во товара в корзине != кол-ву товара при котором делается скидка 
    if(foo != bar){
        return false;
    }
    
    // если корзина вообще пуста
    if(foo < 1){
      return false
    }
    
    // применение скидки к заказу
    
    return true;
    Ответ написан
    Комментировать
  • Правильно ли так формировать ошибки для json запроса?

    mitaichik
    @mitaichik
    Возвращать HTTP статус - (именно это делает setStatusCode) - да, надо, это правильно, и со стороны js писать код удобнее будет. Ваши сомнения, скорее всего, из-за того, что мало кто так делает - но это чисто из-за неопытности тех кто так не делает.

    Еще, если у вас json, совету почитать все про rest из документации yii (https://github.com/yiisoft/yii2/tree/master/docs/g... - там много интересного написано, в фреймворке уже кое-чего подготовленно для этого.
    Ответ написан
  • Есть ли фреймворк для разработки Android приложений по типу Yii?

    mitaichik
    @mitaichik
    Согласен с коллегами - Android SDK и есть основной фреймворк. Но вставлю свои пять копеек:

    Я бы не советовал переносить принципы разработки Yii на Андройд-приложения. Ибо 90% процентов кода андройда - это отображение/ввод информации. Причем по иному принципу, нежели HTML + CSS + JS + AJAX, и там море своих премудростей, сложностей, особенностей. Да и сам Java гораздо мощнее и сложнее чем PHP. Поэтому советую не пытаться переделать Android под привычный php-html подход, а понять и принять его методы, иначе будет очень сложно и рано или поздно ты все равно придешь к этому.

    Что касается фреймворков - то для андройда уже написанно куча всего своего, выбирай лучше не самые удобные варианты (например, какой-нить новомодный AR которым пользуются 2 человека, хоть он и божественен), а то что проверено временем. Какого-либо определенного фреймворка который охватывает все-все-все вроде как нет, но есть много специализированных:

    Gson, Otto, Retrofit/OkHttp, ButterKnife, Android Data Binding, AndroidAnnotations, RoboGuice и прочее прочее - какой лучше юзать - этом лучше спрашивать у Androdi-спецов, я - любитель.
    Ответ написан
    Комментировать
  • Какой выбрать API Client для работы с Magento 2 API?

    mitaichik
    @mitaichik
    Я так понимаю что вам просто http клиент нужен?

    Щас вроде самый популярный - guzzle
    Ответ написан
  • Как лучше тянуть теги к постам, в одном запросе или множестве?

    mitaichik
    @mitaichik
    Тут масса вариантов:

    Можно тянуть одним запросом с JOIN.

    Можете сделать 2 запроса: 1ая выборка постов, потом собираем id постов и по ним вторым запросом выбираем теги. В принципе, релейшены в yii по умолчанию так и работают (кстати, может воспользоваться ими?)

    В варианте с group_concat учтите что он по умолчанию ограничен в длине результирующей строки. Ошибки запроса не будет, он просто обрежет строку тегов.

    Если нет какой-то сложной работы с тегами (например, сбор статистики) то можно вообще их сохранять в таблице постов в каком-либо виде (например, разделенных пробелом или в json массиве)

    В цикле - совсем плохая идея, но... В принципе абсолютно не важно как вы сделаете - главное чтоб производительности хватало. Если будете делать заведомо долгий вариант (как запрос в цикле). то есть, скорее всего, рано или поздно придется переделывать, то важно сделать в коде какой-либо абстрактный способ получения тегов у поста , например, $post->getTags() и использовать его, что бы при переделке способа получения тегов не пришлось переписывать код где они используются.

    Лично я бы сохранял в таблице поста, или юзал релейшены...
    Ответ написан
    3 комментария
  • Как в detailview (yii2) сделаю функцию в значении?

    mitaichik
    @mitaichik
    Нет, нельзя (и имхо - это упущение).

    Можно вычислить значение заранее, и отдать его в value.

    Но! В вашем коде идем микс логики представления и бизнес-логики. По хорошему лучше в модели сделать метод что то типа $model->getTotalSum() и в представлении сделать 'value' => $model->getTotalSum()
    Ответ написан
  • Сервисный слой в yii, как правильно?

    mitaichik
    @mitaichik
    Нет, в не правильном.

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

    Ни про какой отказ от ActiveRecord тут и речи не идет - это совсем про другое. Служба вполне спокойно может оперировать моделями ActiveRecord, почему нет?

    То что вы все заменили геттерами.сеттерами тоже к сервисному слою отношения не имеет. Плюс в Yii гораздо более удобный механизм геттеров сеттеров - читайте документацию.

    Ваш UserService - это вовсе не служба, а репозиторий в чистом виде. Да, вы можете их делать, но почему он не может оперировать удобнейшим и гибким AR?

    Что касается смены выборки пользователей - да, здесь репозиторий поможет, и интерфейс поможет . Только почему репозиторий не может юзать AR, а интерфейс не вешаться на модель?

    Что касается "а что будет, если то да се, фреймворк сменим, и т.п" - не будет такого! За всю практику я встречал только 2 перехода - с yii1 на yii2, и с yii1 на java, все!

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

    Да, что касается служб - советаю почитать про Service Locator и связанные с этим топики в документации, там написано как их лучше реализовывать технически.
    Ответ написан
    Комментировать
  • На какой ОС православно изучать PHP+Yii?

    mitaichik
    @mitaichik
    На любой, которая удобнее тебе. (PHP везде работает). Но, безусловно, *nix проще настраивать (если все вручную делать) + будет более приближен к боевым условиям (так как скорее всего боевые сервера будут на них).

    Но Vagrant вроде так же везде работает. Так что возвращаюсь к началу: на любой.
    Ответ написан
    Комментировать
  • Почему save() срабытывает один раз?

    mitaichik
    @mitaichik
    У вас скорее всего ошибка в логике приведенного кода. Такое чувство, что вы хотите создать 2 строки в БД, но приведенный код сделает одну, а затем изменит ее. Вы б лучше написали что вы хотите сделать.

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

    Вполне возможно что у вас есть уникальный валидатор по cat_id и строка с таким id уже существует - save не удет сохранять а просто вернет false.

    Если делаешь что-то критичное, результат save всегда нужно проверять! И либо бросать эксепшн, либо как-то это обрабатывать.
    Ответ написан
    Комментировать
  • Как лучше организовать хранение пользователей в БД?

    mitaichik
    @mitaichik
    Тут по сути обычное наследование: есть абстрактный класс User, от него наследуются CompanyUser и FreelanceUser, у которых есть свои особенности (у CompanyUser - связь с компанией, у FreelanceUser - реквизиты).

    Как такое можно сделать в Yii: https://github.com/samdark/yii2-cookbook/blob/mast...

    Но вообще способов реализации здесь куча: schema-less базы данных, разные таблицы, EAV и прочее.

    Я бы сделал 3 таблицы: user, company, freelance_requesite. В CompanyUser сделал бы релейшен на company, в FreelanceUser - на реквизиты, и воспользовался бы механизмом из cookbook'a.
    Ответ написан
  • CakePHP: beforeValidate не вызывается. По какой причине?

    mitaichik
    @mitaichik
    Вариантов много - установите XDebug да посмотрите как что происходит. Это профессиональней чем метод тыка.

    Возможно, вы переопределили метод save?
    Ответ написан
    Комментировать
  • Как правильно связать приложение на Java и Nginx?

    mitaichik
    @mitaichik
    Возможно подойдет https://www.nginx.com/resources/wiki/modules/java_...
    Ответ написан
    Комментировать
  • Что лучше: yii\db\Query или Active Record?

    mitaichik
    @mitaichik
    В первую очередь нужно настроить связи таблиц в БД (прописать ключи) - это делается с помощью MySQL менеджера (или какая бд у вас там).

    Далее сгенерировать классы объектов (в терминологии Yii - модели) с помощью Gii (чтоб не писать код вручную). Если вы правильно сделали пункт 1, то он вам сам сгенерирует все необходимые связи (после чего имеет смысл удалить ненужные и переименовать, например связь pageValue в value - но это по желанию).

    После этого просто пользуйтесь ActiveRecord'ом, например:

    $page = Page::findOne(1);
    echo $page->value->text;
    echo $page->category->title;
    
    foreach($page->params as $param){
       echo $param->name .' : '. $param->value;
    }


    Yii сам выполнит необходимые запросы и подгрузит необходимые данные.

    Приведенный коллегами метод with позволяет сократить кол-во запросов (подгружает связи сразу). joinWith позволяет джойнить тадлицу в запросе чтоб делать по ней условия, и много чего другого есть в ActiveRecord - все это описано в документации.

    В целом - ActiveRecord - потрясающе удобный механизм, его однозначно стоит изучить.
    Ответ написан
    Комментировать
  • Setting read-only property и Trying to get property of non-object Yii2-в чем ошибка?

    mitaichik
    @mitaichik
    Как минимум одна недоработка есть в последнем файле - в переопределении сценриос вызывается метод далекого предка, возможно это дает сбой. В первом файле несколько геттеров без сеттеров - вот вам и реад-онли проперти. В каком файле ошибка? Выложите стектрейс.

    И, черт возьми, что это за нейминг? Где руский, где английский, где с большой буквы, где с маленькой, где кемлкейс, где андерскор. Ну как так можно!
    Ответ написан
    2 комментария
  • Аякс в аяксе в аяксе, какое решение выбрать?

    mitaichik
    @mitaichik
    Это вполне нормальный алгоритм.

    Можешь грузить сразу всю форму. А показывать только один шаг и менять их, сделать клиент валидацию (если возможно) - тогда придется делать только один запрос - при окончательном сабмите формы.

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

    Поищи плагины для jQuery или своего фреймворка - наверняка их с десяток найдется.
    Ответ написан
  • Проблема с архитектурой БД будущего приложения, как правильно ее организовать?

    mitaichik
    @mitaichik
    Я правильно понял что вы хотите отказаться от WP и переписать все на YII?

    Если эти сайты сильно взаимодействуют друг с другом - я б сделал одну БД, если проблема лишь в авторизации - то разные, и вынес авторизацию в отдельный сервис.

    На счет производительности я б вообще не беспокоился (при 200 * 16 посетителей в день, хотя надо смотреть на ваши запросы). Думаю, тут хватит правильно построенных индексов, кеширования, загрузка в память (in-memory storage/redis/memcache). Ну и даже если не поможет - то проблем никаких нет сделать те же репликации/шардинги/партиционированние/кластеризацию/замену диска на SSD и пр.
    Ответ написан
    Комментировать
  • Как с помошью ActiveRecord в Yii2 вносить данные, содержашие внешний ключ?

    mitaichik
    @mitaichik
    Это происходит из-за того, что вы объявили аттрибуты как свойства класса ( public $object_id;) - убери это, в Yii доступ к аттрибутам осуществляется через магические методы.

    А вообще, лично я, чтоб связать релейшены, юзаю метод ActiveRecord::link - очень удобный метод, советуб обратить на него внимание.
    Ответ написан
    Комментировать
  • Что не так с ArrayHelper::index YII2?

    mitaichik
    @mitaichik
    Все прекрасно работает, что то не так с вашим кодом. Может опубликуете его - подскажут предметно.
    Ответ написан
    4 комментария