• Хороший фреймворк для разработки бота?

    tomnolane
    @tomnolane
    профессиональный разработчик
    botman на данный момент самый "лучший" (ИМХО), ибо не очень большой выбор. В целом, он не плох (если) хорошо изучить документацию. Я, например, ВК драйвер недавно сделал для него (скоро залью на гитхаб). Проблемы только с Телеграмм - если использовать сервер из РФ, он работать не будет. А так, в целом, очень неплохой. Лучше, я пока не встречал

    п.с. до него я написал трёх ботов "в ручную" (для ВК, Фейсбук и Web). Работают норм, но больше похоже на "костыли", и не очень удобно. А в botman "Hello world" в 39 строк кода, у меня выглядит так:
    <?php
    require_once 'vendor/autoload.php';
    
    use BotMan\BotMan\BotMan;
    use BotMan\BotMan\BotManFactory;
    use BotMan\BotMan\Drivers\DriverManager;
    use BotMan\BotMan\Cache\CodeIgniterCache;
    
    $config = [
        'facebook' => [
          'token' => 'EAAZAT6dcgYDQBAC6x7X******85SLSPF0BRCVeRPPgutgtfvZCkZC9lxnP5pYcRXtF0m7sOAliTEztGPR45cOxx3rZAMZBc9Mb9UhB62gBSG2kXTo7ldyk2fTquadMJQVY8nqKxiOakLXLUZBCSavncCljoe5IAZDZD',
          'app_secret' => 'b52517e****71b6afa76dca657',
          'verification'=>'my_example_veryfy_token',
        ],
        "vkontakte" => [
           "token" => "9af81c610faf0ea319*****d17b0b2b53b164ff3b18cc1b9d4e422fd15db046594139078"
        ],
        'telegram' => [
            'token' => '60176***:****fVCz43IblR72siiyfbebv7wgqCn8tc'
        ]
    ];
    
    DriverManager::loadDriver(\BotMan\Drivers\Vkontakte\VkontakteDriver::class);
    DriverManager::loadDriver(\BotMan\Drivers\Facebook\FacebookDriver::class);
    DriverManager::loadDriver(\BotMan\Drivers\Telegram\TelegramDriver::class); 
    
    $this->load->driver('cache');
    
    $botman = BotManFactory::create($config, new CodeIgniterCache($this->cache->file)); 
    
    $botman->hears('привет', function (BotMan $bot) {
        $bot->reply('Хай.');
    });
    
    $botman->fallback(function($bot) {
        $bot->reply('Чё ??? ...');
    });
    
    $botman->listen();


    UPD
    на этом фреймворке возможны проблемы с русским языком (кодировкой).
    Чтобы её решить, нужно использовать iconv
    iconv('utf-8', 'windows-1251', тут_ваш_ответ_сервера);
    Ответ написан
    1 комментарий
  • Как в laravel произвести валидацию массива объектов?

    Весело

    Я делал так
    axios.post('/api/test', {myfiles: [{generatedName:'test',originalName:''},{originalName:'test2'}], article_id:1})


    В контроллере у меня

    $request->validate([
                'article_id' => 'required',
                'myfiles.*.generatedName' => 'required|string|max:255',
                'myfiles.*.originalName' => 'required|string|max:255',
            ]);

    Выдало нормальную ошибку
    {"message":"The given data was invalid.","errors":{"myfiles.1.generatedName":["The myfiles.1.generatedName field is required."],"myfiles.0.originalName":["The myfiles.0.originalName field is required."]}}


    P.S Laravel 5.6
    Ответ написан
    1 комментарий
  • Как правильно сохранить модель в Laravel?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Если вы следуете методологии REST, то у вас post_id не в $data, а прямо в URL.
    И тогда метод контроллера будет выглядеть примерно так:
    public function save(Post $post, Request $request) {
      $fields = $request->only(['field', 'other_field']);
      $post->comments()->save($fields);
    }

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

    Первый способ - процедурный. Связь между сущностями описана в "магическом" поле в каком-то массиве. Он имеет право на существование в каких-то технических консольных скриптах, например (и то не всегда).
    Второй - объектно-ориентированный и легче читается. Этот код очень хорошо коррелирует с методологией REST, когда мы оперируем сущностями, а не массивами и абстрактными объектами.
    Ответ написан
    3 комментария
  • Куда развиваться и как профессионально расти как php программист в маленькой фирме?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Взгляните на рынок -- куча крутых нагруженных сервисов делается в мире.

    Чтобы ответить себе же, ответьте мне (я расту, мне интересно):
    - пишете ли вы тесты? TDD? DDD?
    - делаете ли сервисный слой?
    - следуете ли GRASP и SOLID?
    - есть ли опенсорсное что-либо? (например делали что-то для того же Symfony?)
    - оптимизировали ли вы огромные нагрузки?
    - упирались ли в пределы php и выносили ли отдельные элементы системы на др языки?
    - обучали ли вы ребят (с нуля, хорошему коду и практикам)?
    - занимались ли международными проектами?
    - запили ли что-нибудь свое, что стало популярным?
    - участвовали ли в конференциях?

    Если везде да -- скажите, что это за маленькая фирма, в которой так можно вырасти?

    Короче -- сделай список, в чем слабоват, что бы ты хотел -- и лупи силой железобетона по этим точкам!
    Ответ написан
    1 комментарий
  • По какому принципу создавать контроллеры в MVC?

    BoShurik
    @BoShurik
    Symfony developer
    Catalog
        Controller
            Admin
                ProductController.php
            ProductController.php # ReviewManager используется тут
        Entity
            Product.php
            Review.php
        ReviewManager.php
    Order
        Controller
            Admin
                OrderController.php
            OrderController.php
        Entity
            Order.php
            Item.php
    User
        Controller
            Admin
                UserController.php
            UserController.php
        Entity
            User.php

    либо
    Controller
        Admin
            Catalog
                ProductController.php
            Order
                OrderController.php
            User
                UserController.php
        Catalog
            ProductController.php # ReviewManager используется тут
        Order
            OrderController.php
        User
            UserController.php
    Entity
        Catalog
            Product.php
            Review.php
        Order
            Order.php
            Item.php
        User
            User.php
    Catalog
        ReviewManager.php

    как больше нравится

    Не уверен нужен ли ReviewController, зависит от функциональности. Если это просто виджет на странице с недавними товарами, сделал бы в публичном ProductController
    Ответ написан
    Комментировать
  • Как влиться в тренд нынешней веб-разработки?

    @SuperOleg39ru
    Front-end разработчик
    Добрый день!

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

    flexbox, grid layout
    - это css из современных стандартов. Что бы знать, когда применять - вы должны знать версии старых браузеров, которые необходимо поддерживать на вашем проекте, и соответствующую поддержку этих стилей. Например, формировать элементы на flexbox на порядок удобнее, чем на float, но в IE9 вы уже использовать flexbox не можете.
    Немного о новинках в css тут.
    Поддержка браузерами тут.

    gulp, webpack и пр.
    - это инструменты, которые созданы для облегчения рутинных задач.
    Для верстки очень удобно использовать gulp - вы описываете задачи, такие как создание локального сервера, мгновенная перезагрузка страницы при изменениях, минификация ваших файлов, и прочее.
    Посмотрите отличный скринкаст от Ильи Кантора!

    препроцессоры
    - представьте, что вам чего-либо не хватает в html и css.
    Например, вы хотите разбивать большие html файлы на множество мелких, или вам нужно вставить в html динамическое содержание - для этого созданы html шаблонизаторы. Вы используете в работе синтаксис конкретного шаблонизатора, затем тот же gulp автоматически собирает эти файлы в обычный html, который понимает браузер.
    Аналогичная ситуация с css, препроцессоры позволяют разбивать файлы на мелкие, и собирать в один, доступны переменные и функции, и многое другое.
    Популярный шаблонизатор Pug
    Один из css-препроцессоров Stylus

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

    Ну и конечно статьи и подкасты:
    https://habrahabr.ru/
    jsraccoon.ru

    https://soundcloud.com/web-standards
    https://radiojs.ru/

    Конкретные статьи и ресурсы для новичка:

    frontender.info/a-baseline-for-front-end-developers
    frontender.info/a-guide-to-flexbox
    css-live.ru/articles-css/pravilnye-kontrolnye-toch...
    https://medium.com/russian/%D0%BE%D1%82-%D0%BD%D1%...
    https://medium.com/russian/%D0%BE%D1%82-%D0%BD%D1%...
    https://habrahabr.ru/company/zfort/blog/321214/
    https://frontendmasters.gitbooks.io/front-end-hand...

    Дерзайте!
    Ответ написан
    6 комментариев
  • Из чего состоит окружение продвинутого php разработчика?

    nonlux
    @nonlux
    Поправил ответ, так будет логичнее.
    Ниже приведены инструменты, которые использую лично я и причины почему.

    1. docker-окружение
    (в 90% случаев для веб-разработки достаточно php -S 0.0.0.0:8000)
    виртуальные машину становятся нужны:
    - когда надоест переустанавливать хост-систему из-за обилия хлама
    - когда работаешь с несколькими проектами имеющие специфические (разные) настройки окружения(php, web-сервер, база)
    - когда надоест решать проблемы в команде из-за того что по разному настроено окружение

    2. git - система контроля версий
    Помнить что ты и когда изменял, должен не человек, а машина.
    Это необходимо:
    - чтобы не испортить всю работы за прошедший год нажав del
    - чтобы определить кто из команды злодей и все испортил
    - чтобы не думать как перенести свежую версию проекта с одной машины на другую

    3. composer - пакетный менеджер для php
    Нужно, когда лениво помнить все ссылки на все php библиотеки, самому качать их, подключать в автозагрузку

    4. behat + phpspec
    Тесты нужны:
    - когда хочется почувствовать себя безопасности и для сладко спать ночь, забыв о кошмарах о сломанном коде
    - когда в production все снова сломалось
    - когда ты написал одну новую фичу, а сломал три

    5. zsh
    Хорошей консолью приятно пользоваться, работа идет быстрее.
    Консоль есть жизнь, жизнь есть shell.

    6. tmux
    Мало одно окошка в консоли, тогда tmux идет к вам.
    В качестве бонуса получите возможность парного программирования совершенно бесплатно

    7. tmuxinator
    Надоело каждый раз открывать кучу окон для tmux, попробуйте его )
    8. vim
    - Потянуло на что-нибудь необычное?
    - Хочется эффективнее писать код ?
    Ну что открыли vim? В первый раз? Поздравляю закрыть вы его не сможете )
    Вызывает зависимость при частом потреблении


    9. continuous integration сервер
    Вообще ci сервер это одушевленная машина. Это твой тамагочи, ты кормишь его хорошим кодом, он радуется и ты видишь приятный зеленый огонек. Если ты дал с код от скажет что не вкусно. Ну а если ты ему, что гнилое он будет долго на тебя орать плохими словами. Со временем он растет и учится делать более серьезные вещи, и начнет помогать тебе:
    Его скилы:
    - он может сам выполнить 10 минутные тесты
    - подготовить и опубликовать проект
    - рассказать о твоем коде, даже то что ты не знаешь
    Он легко обучается и ты легко сможешь научить его удивительным вещам.

    10. куча линтеров на pre commit hook
    Чтобы ci не кормить плохими продуктами, хорошо бы проверять что ты сделал до отправки на сервер. Что бы не забыть это сделать git сам работу.

    11. gulp
    gulp - это еще один твой помощник.
    как если использовать, как watcher файлов + livepreview, можно забыть о F5 в браузере

    12. bower
    Тоже что и composer но для управления ассетами. Это я о всяких jQuery и Bootstrap

    666. Линукс
    Даже если не хочется ставить как хост-систему, его все равно надо знать. Ваш код будет работать на нем )
    Ответ написан
    16 комментариев
  • Как написать простое приложение на Android?

    @mind3
    1. Придумать простое приложение
    2. Установить Android Studio
    3. Создать проект.
    4. Пишешь приложение, ищешь в гугле ответы на нужные вопросы, изучаешь Java в процессе, постигаешь кунг-фу разработки под Android
    5. Profit!
    Ответ написан
    Комментировать