• Зачем нужны события в yii2?

    MegaMufa
    @MegaMufa
    Событийная модель помогает строить слабосвязанную систему. Пример из жизни. Я сейчас работаю над SAAS платформой. Компания покупает учетку и выбирает за какие модули платить. Есть модули учета, проверок, для кадровиков и т.д. Модули должны взаимодействовать между собой, но любого модуля может не быть.

    Например при создании сотрудника в модуле "кадррезерв", его автоматически надо добавить в модуль "учета". Я не могу напрямую дергать метод из другого модуля т.к. заранее не известно, будет он куплен или нет.

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

    Это на самом деле очень удобно. Но есть и негативная сторона: из-за слабой связаности усложняется навигация по коду. Что бы узнать, где есть обработчики приходится пользоваться поиском по имени события. Но это малая цена за гибкость, которую дают события.
    Ответ написан
    9 комментариев
  • Фрилансер, хочу открыть фирму. Ваш опыт?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    1) Не стоит снимать офис, пока нет острейшей необходимости. Острейшая необходимость - вас 4+ разработчиков и вы должны бешено что-то вместе пилить. До этого момента офис вам не нужен. Чтобы сесть в офис и уж тем более нанимать сотрудников вам нужно быть ИП или юр. лицом. Чтобы их открыть чаще всего это занимает от двух недель и не меньше 20к рублей. Сам офис будете искать, ездить, реонтировать, докупать технику туда, решать проблемы с ним постоянно возникающие - итого уже тысяч 100 для того чтобы смочь начать работать в офисе.
    2) офис почти гарантированно заставит вас нанимать сотрудников официально. Если коротко, найм сотрудника влечёт 40% налогов от его з/п.

    p.s. Попробуйте trello, он настолько простой и приятный что хочется в нем постоянно сидеть и закрывать таски)
    Ответ написан
    5 комментариев
  • Развитие в электронике/схемотехнике. Есть ли аналог схеме ориентирования в программировании?

    a_volkov1987
    @a_volkov1987
    Инженер-схемотехник
    1. Освоить базовый курс электротехники, чтобы понимать, куда, как и когда текут токи
    2. Освоить базовый курс по пассивным и активным радиоэлементам
    3. Выбрать направление: цифровая или аналоговая техника.
    4. Если аналоговая, то учимся делать радиоприемники, усилители и т.д.
    Если цифровая - проходим базовый курс цифровой схемотехники.
    Параллельно п.4 учимся паять и изучаем нормальный софт для проектирования схем и печатных плат (P-CAD, Altium designer, Eagle)

    Советы сразу брать ардуино мне не по душе, потому как без базовых сознаний аналоговой и цифровой схемотехники сложно к ней приделать что-то более интересное, чем пара светодиодов. Надо хотя бы понимать, в чем разница между биполярным и полевым транзистором, как их использовать и чем опасно для транзистора реле и индуктивные нагрузки в целом.
    Более того, лично я допускаю сборку изделия из ардуины и кучи модулей только в одном случае: это макет. На этом макете я отработаю софт и железо, потом разработаю свою печатную плату и на базе макета соберу красивое и работоспособное изделие. А макет будет разобран. Не вылезать за пределы ардуино с парой модулей и лапшой из кабелей это все равно что проектировать станки из детского конструктора. Можно, но ценность невелика.
    Ответ написан
    Комментировать
  • Как привязать footer к низу экрана в Twitter Bootstrap?

    @web11
    для bootstrap 3 есть отдельный пример с прижатым footer
    getbootstrap.com/examples/sticky-footer

    в файл стилей нужно добавить
    html {
      position: relative;
      min-height: 100%;
    }
    body {
      /* Margin bottom by footer height */
      margin-bottom: 60px;
    }
    #footer {
      position: absolute;
      bottom: 0;
      width: 100%;
      /* Set the fixed height of the footer here */
      height: 60px;
      background-color: #f5f5f5;
    }
    Ответ написан
    6 комментариев
  • Как подружить React-Router onEnter и redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Вопрос волнующий многих. Опишу два способа.

    1
    Есть альтернатива onEnter: компонент, проверяющий показывать ли содержимое, либо показывать "доступ запрещен", например. Сам способ я подсмотрел здесь, если вы понимаете достаточно глубоко redux - то все понятно.
    Если нет, то я когда-то должен закончить мини-учебник по роутингу и вернусь к этому ответу.

    2
    Чтобы в onEnter прокидывать "store", нужно обернуть роуты в функцию.

    Выглядит примерно так:
    export function getRoutes(store) {
      return (
        <div>
          <Route path='/' component={App}>
            <IndexRoute component={Home} />
            <Route path='/admin' component={Admin} onEnter={Admin.onEnter.bind(this,store)}/>
            <Route path='/genre/:genre' component={Genre}>
              <Route path='/genre/:genre/:release' component={Release} />
            </Route>
            <Route path='/list' component={List} />
          </Route>
          <Route path='*' component={NotFound} />
        </div>
      )
    }


    Здесь в компонент Admin есть метод onEnter (я его вынес туда, так как это удобнее по-моему), и в нем вы можете спокойно проверять токен. Так же можете использовать store.getState() и подобное. Не забывайте, про стандартные возможности redux - они открывают многое, для чего необязательно тащить библиотеки.

    export default class Admin extends Component {
      static onEnter(store, nextState, replace) {
        const user = store.getState().user
        if (!user) {
          replace('/')
        } 
      }
      render() {
        return (
          <div className='row'>
            <div className='col-md-12'>Раздел /admin</div>
          </div>
        )
      }
    }


    Тем не менее, вопрос для меня лично открыт. Я пытаюсь решить кейс с редиректом в ответе на action ;) Как только найду устраивающее решение, так сразу и закончу свой мини-туториал
    Ответ написан
    Комментировать
  • Yii2 как правильно создать сложные формы с зависимостями и валидировать их?

    Это первое решение, которое пришло мне в голову. Поправьте, если в чем то ошибся.
    Данный код не проверялся на работоспособность, это только концепция.

    Controller
    class ControllerForm extends \yii\web\Controller
    {
        public function actionCreate()
        {
            $post = Yii::$app->request->post();
            $step = Yii::$app->request->post('step', 'step1');
            $model = ModelForm::model($step);
            $model->attributes = $post;
    
            if ($model->load($post) && $model->validate()) {
                if ($step === 'stepLast' && $model->save()) {
                    return $this->redirect(Url::toRoute(['index']));
                }
            }
    
            return $this->render('form', ['model' => $model]);
        }
    }


    Model
    class ModelForm extends ActiveRecord
    {
        public function rules()
        {
            return [
                [['field1', 'field2'], 'required', 'on' => 'step1'],
                [['field3'], 'required', 'on' => 'step2'],
                [['field1', 'field2', 'field3'], 'safe', 'on' => ['step1', 'step2', 'stepLast']]
            ];
        }
    }


    View
    $form = ActiveForm::begin([
        'layout' => 'horizontal',
    ]);
     echo $form->field($model, 'name', ['options' => ['class' => 'name '.$model->scenario]]);
    ActiveForm::end();


    Css
    .name.step1 {
         display: block;
    }
    
    .name.step2 {
         display: none;
    }


    UP1
    В документации Yii2 есть информация о использовании нескольких моделей на форме
    www.yiiframework.com/doc-2.0/guide-input-multiple-...
    Ответ написан
    3 комментария
  • Как установить git для использования в Open Server?

    @riente
    При установке git.exe мог быть прописан в PATH, просто возможно OpenServer использует только свой PATH. Лично мне помогло в настройках во вкладке "Сервер" выставить значение "Свой Path + Win Path".
    Ответ написан
    5 комментариев
  • Как перевезти системный блок в самолёте?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Я летаю туда-назад со своим системником ежегодно (не люблю ноуты, предпочитаю своего зверя). Жесткие диски вынимаются и перевозятся в ручной клади. Остальное пакуется в обычную коробку от системника и аккуратно проклеивается скотчем по всем швам, на регистрации на нее вешают красные наклеечки "Fragile" - погрузка-выгрузка на борт происходит в ручном режиме, никаких транспортных лент. Иногда, если кроме компа еще есть много багажа, возможно придется доплатить за суммарный перевес. Монитор - зависит от размеров. До 23" можно в ручную кладь брать, возражать вряд ли кто-то станет. Ну а 27" точно придется сдавать в багаж, схема такая же как с системником.
    Ответ написан
  • Yii: не работает автодополнение для методов модели в PHPStorm?

    Пора начать использовать PHPDoc
    /**
     @var Site
    */
    protected $_oModelSite;
    /**
     @var HelperText
    */
    protected $_oHelperText;
    


    Зачем это «o» в начале? И так же понятно что это экземпляр, а не тип.
    Сейчас есть полноценная инкапсуляция, нет необходимости писать префикс "_" что бы дать знать что это приватный тип.
    Ответ написан
    3 комментария
  • Как правильно работать на oDesk?

    @Ivan85 Автор вопроса
    На одеске ситуация такая:

    Бился-бился, наконец взял задание — сделать какую-то автоматизацию для Google Adsense/Adwords за 30 баксов — FIXED PRICE — мне его дали! Интенсивно работал, пытался что-то сделать. Оказалось, что для выполнения задания нужен тестовый аккаунт, без него выполнить невозможно. Человек отказался предоставить тестовый аккаунт. Я начал регистрировать тестовый аккаунт, заняло это неделю, человек был предупрежден.

    Тестовый аккаунт никак не хотел регистрироваться. Через 10 дней этот товарищ меня попросил отказаться, сказал, что не будет даже ставить минус. Я сказал — подождите ещё 2 дня. Наконец, аккаунт зарегистрировался, но что делать с нулевым аккаунтом и как именно тестировать — так и не удалось разобраться.

    Да и вообще то ли уровень требований там такой офигительный, то ли я тупой (не забываем, я прошёл около 15 тестов с результатами Top 20, Top 10), но такое впечатление, что задания там в основном для индусов за 5 долларов в час. 15 долларов в час встречается редко и такое впечатление что уж за такие офигенные деньги должен быть супер-пупер и выпрыгивать из штанов.

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

    Бидов поставил туеву хучу — отклик процентов 5 (пока, к сожалению, нет фидбэков).

    В общем, сделал Refund. Итог: разочарование — столько времени потратил с такой низкой отдачей. Хорошо что параллельно веду ещё свой проект плюс халтуры — удалось заработать жалкие 10-15 тысяч (работал примерно), на одеске полный НОЛЬ. Хотя в данный момент я свободный человек (с работы уволился).

    В общем, моя третья попытка не удалась. Что ж, будет пытаться делать четвёртую.
    Ответ написан
    1 комментарий
  • Как правильно работать на oDesk?

    @1x1
    — Иногда требуется выполнить работу через Team Viewer, в нём работать с большими пингами неприятно.
    — Когда работать, когда не работать — решать вам. Если есть долгосрочные контракты — согласуйте отдых заранее. В выходные работать, как правило, не заставляют (кроме срочных контрактов, где это явно написано).
    — Не идёт — не делайте. Не можете выполнить в срок — сразу же сообщите работодателю и согласуйте размер рефанда (с вашими соображениями).
    — Баги, тесты, доки и прочее — по таймеру. [Длительное] чтение вами мануалов — без таймера. Если лимит исчерпан, отошлите отчёт/прогноз работодателю.
    — Задания разные, от «нажать 5 кнопок в админке вордпресса» до «сделать вебмейл лучше, чем у гугла»
    Ответ написан
    Комментировать
  • Сайты веб-фрилансеров?

    Dharmantra
    @Dharmantra
    elance.com & odesk.com – лидеры зарубежных фриланс бирж;
    free-lance.ru – очень популярен, много заказов, монетизирован целиком и полностью, захвачен набившими рейтинг фрилансерами;
    weblancer.net – раньше был очень популярен, сейчас не знаю;
    freelansim.ru – удобный, красивый, простой, но к сожалению пустой, надеюсь в будущем ситуация с малым количеством заказчиков изменится.
    Ответ написан
    2 комментария
  • Отличая Symfony 2 и Yii?

    wartur
    @wartur
    Автору топика за поднятый вопрос благодарность. Сам пишу на Yii уже около полу года. Всем советую. Легко, просто, практично, все есть, куча сторонних модулей (в моем проекте их более 3-х, сэкономлено минимум 2-3 недели работы)

    На данный топик наткнулся, что бы узнать не созрел ли я для более «мощных» академических фреймворков вроде SF2 или ZF2 и судя по отзывам понял кое-что для себя.

    Так же скажу, что ZF2 мне не нравится из-за тяжести (как минимум минимум в 2 раза медленнее запускается ядро), и «многословность» (уж очень много писанины надо генерировать в коде)
    Ответ написан
    4 комментария
  • Как бороться за справедливость?

    AxisPod
    @AxisPod
    А чего было ожидать, в лучшем случае только участникам есть до этого дело, остальные примут ту правду, которую им преподнесут, доказывать тут что-либо бесполезно. Тут конкурс и вся фигня.

    Я пытался доказать правду, когда у меня тырили деньги со телефонного счета, на счете 100р к примеру, на следующий день 40р, звонков не было, так в данном случае еле еле смог доказать по распечатке, было видно, что в один момент времени по 3-5 звноков продолжительностью 1-3 секунды, тут в суде дело решилось. А у вас какие доказательства?

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

    Я уже давно вижу, что все подобные конкурсы — есть лохотрон, показуха и все такое, выигрывает только тот, кто должен изначально выиграть.
    Ответ написан
    Комментировать
  • ZF || YII || Рельсы ||?

    @egorinsk
    Используйте Yii, если хотите писать на PHP, и что-нибудь самописное если нравится Руби. ZF — редкостный тормоз и пример оверинжиниринга, там для простой задачи надо 20 классов и их через-какую нибудь депенденси инжекшен еще свзяать между собой. Такое ощущение, что его разработчики поклонники Явы.

    А, еще ни за что не используйте OpenSource CMS на PHP. Они написаны в дурном стиле и некачественно, тормозят, а любая попытка что-то модифицировать в них чревата разрушением мозга (особенно система шаблонов в Друпале).
    Ответ написан
    1 комментарий
  • SaaS: одна БД на клиента, или общая база данных?

    abarmot
    @abarmot
    Решал аналогичную задачу и столкнулся с теми же вопросами, что и вы.

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

    Если же база одна — в скором времени какая-нибудь быстро растущая таблица станет «неуправляемой» и серьезно просадит производительность. Конечно можно разносить такие таблицы на партиции, но в нашей ситуации есть более интересное решение.

    Надо держать несколько БД и в каждой несколько сотен компаний. При этом новые базы можно добавлять по мере развития.
    Какое-то время вам вообще будет достаточно одной базы.

    Несколько рекомендаций:

    1. одну из БД (очевидно первую) назначаем мастер- или «системной» базой. только в ней будет хранится данные общие для всей системы. Например новости вашей системы, глобальные настройки и конечно главное — список компаний клиентов.

    2. во все таблицы с клиентскими данными внести поле COMPANY_ID. Более того внести его в состав всех первичных и внешних ключей. Т… е. первичный ключ таблички ORDER будет (COMPANY_ID, ID)

    3. ID инкрементировать в рамках компании, а не всей таблицы. Т.е. у каждой компании будет заказ с ID = 1,
    2 и т.д.

    Пример:

    COMPANY (id, name) — «системная» таблица с компаниями-клиентами

    ORDER( company_id, id, customer ) — «клиентская» таблица заказов
    PRODUCT( company_id, id, name ) — каталог товаров компании
    ORDER_ITEM( company_id, order_id, product_id) — продукты в заказе

    первичные ключи:
    в ORDER и PRODUCT — (company_id, id)
    в ORDER_ITEM — (company_id, order_id, product_id)

    внешние ключи в ORDER_ITEM:
    (company_id, order_id) → ORDER( company_id, id)
    (company_id, product_id) → PRODUCT( company_id, id)

    Такой подход дает во-первых максимальную изолированность данных компании.
    Во-вторых — возможность переселиения компания из одной БД в другую без конфликта первычных ключей.

    Если будут вопросы — пишите в местную почту ;)
    Удачи.
    Ответ написан
    3 комментария
  • Посоветуйте хорошую книгу (книги) по проектированию архитектуры ПО. Начально-среднего уровеня

    Дополню, что лично мне помогло (то есть запомнилось):

    — Фаулер, Скотт UML. Основы.

    — Нильссон. Применение DDD и шаблонов проектирования.
    Ответ написан
    Комментировать