Ответы пользователя по тегу Yii
  • Есть ли фреймворк для разработки 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?
    Ответ написан
    Комментировать
  • Что лучше: 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
    Я правильно понял что вы хотите отказаться от 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 комментария
  • Два Yii-разработчика и один nodejs, что с ними делать?

    mitaichik
    @mitaichik
    Перепрофилировать nodejs на фронтенд - пусть пишет на angular/react фронтендовую часть. Согласен с предыдущим высказыванием, что без надобности плодить технологии на сервере - путь к провалу.
    Ответ написан
    Комментировать
  • Какие фреймворки / CMF поддерживают из коробки EAV?

    mitaichik
    @mitaichik
    Имхо, крайне не хороший паттерн. Вы уверенны что нет возможности выбрать scheme-less документную базу? Например монго?
    Ответ написан
    1 комментарий
  • Как "закоммитить" папку vendor в composer?

    mitaichik
    @mitaichik
    Очень плохая идея. Соглашусь с коллегами - тут лучше всего сделать пулл-реквест в репозиторий вендора и попросить принять его. Либо просто сделать форк репозитория и подключать его.
    Ответ написан
    Комментировать
  • Есть ли смысл в нативных связях в БД, если relation в active record их дублируют?

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

    И аккуратней с каскадным удалением. Частенько при удалении должна отработать какя-то дополнительная логика, например в том же afterDelete. При каскадном удалении оно идет на уровне бд, а не на уровне приложения, поэтоу логика не отрабатывает.
    Ответ написан
    Комментировать
  • Почему не вызывается вот так SiteController::index()?

    mitaichik
    @mitaichik
    Если вы так хотите сделать - скорее всего у вас размыта бизес-логика и логика контроллеров. А вообще, не знаю поможет ли вам это, но там есть метод forward : www.yiiframework.com/doc/api/1.1/CController#forwa...
    Ответ написан
    Комментировать