• Как спарить данные о посте в Инстаграм на PHP?

    agoalofalife
    @agoalofalife
    Team Lead
    Посты достаточно просто парсить из браузера.
    Если знаете JS можете посмотреть в сторону puppeteer
    Доступ к функциям браузера, может процесс даже в фоне запускать.
    Как примерно это сделать можете посмотреть в этом проекте.
    Из этой же области можно посмотреть zennoposter, там по большому счету кодить не надо уметь.
    Или смотрите на готовые прикладные решения.
    Ответ написан
    Комментировать
  • Есть ли API которое позволит получить список стран и регионов/штатов этих областей?

    agoalofalife
    @agoalofalife
    Team Lead
    Я использовать vk api, там была возможность выбрать страну и язык.
    Из опыта экспортировал Россию и Казахстан.
    По России был большая база с регионами и городами на русском.
    Та же ситуация была по Казахстану на казахском.
    Тут надо смотреть предметно, но возможно это вам подойдет.
    Еще писал библиотеку с небольшим CLI под эту задачу
    Ответ написан
    Комментировать
  • Как реализовать корзину на LARAVEL?

    agoalofalife
    @agoalofalife
    Team Lead
    1. Хранить на сервере можно по-разному, в базе данных, сессии(временные файлы на диске), любой другой драйвер хранения.
    2. Надо определиться как долго будут храниться товары в корзине. Лучше хранить сессии в базе(в laravel есть такой драйвер) и корзину тоже, соответственно они будут между собой в отношении. Получается некие таблицы, для временных хранений.
    Тут как и в localStorage данные привязываются к уст-ву и клиенту(браузер), может произойти несколько сессий.
    Данные у вас временные, можно их просто подчищать, через cron например.
    Ответ написан
    Комментировать
  • Кто работал с API фнс РФ?

    agoalofalife
    @agoalofalife
    Team Lead
    Надо использовать soap. Для это надо использовать, внутренний пакет в php.
    $soap = new SoapClient('https://openapi.nalog.ru:8090/open-api/AuthService/0.1?wsdl');
    $soap->__soapCall("GetMessage", [[
                'Message' => [
                    'any' => "<tns:AuthRequest xmlns:tns=\"urn://x-artefacts-gnivc-ru/ais3/kkt/AuthService/types/1.0\">
    	<tns:AuthAppInfo>
    		<tns:MasterToken>$masterToken</tns:MasterToken>
    	</tns:AuthAppInfo>
    </tns:AuthRequest>"
                ]
            ]];)

    Это запрос для получение временного токена.
    Ответ написан
  • Где можно посмотреть практики написания хороших тестов для laravel?

    agoalofalife
    @agoalofalife
    Team Lead
    В общем можно посмотреть у Jeffrey Way на https://laracasts.com
    Еще мне нравилась его книга правда наверное она не много устарела.

    Начал копаться и вот здесь не понимаю каким образом в шаблон эндпоинта подставляется конкретный id. https://github.com/austintoddj/canvas/blob/master/...к

    Покопался и открыл для себя тоже кое что новое..
    В ссылке есть ниже метод и у него сверху мета тэг @dataProvider
    Что это такое почитать об этом можно здесь

    Что касательно true way or laravel way - это все относительно.
    Например в этом проекте от тестирует отношения в моделях, это скажем прям такое..
    Потом он тестирует консольные команды..интересно зачем?
    Конечно можно все протестировать, но какой в этом собственно смысл?
    Организация папок - это тоже дело щепетильное, как и название методов и переменных.

    Мне больше нравиться подход DDD. Как правило в проекте чаще всего меняются бизнес требования а не инфраструктура.
    Что может произойти вероятнее - поменять базу данных или поменять алгоритм начисление денежных средств?
    Так вот тестирование доменной области намного оправдание чем тестирование отношений модели в Eloquent.
    Ладно, что - то я разошелся, короче говоря, пишите тесты -> набирайтесь опыта -> рефакторинг -> пишите тесты.
    Ответ написан
    2 комментария
  • Стоит ли стажироваться на php разработчика, если у них cms Битрикс?

    agoalofalife
    @agoalofalife
    Team Lead
    Так вот, стоит ли идти на стажировку с дальнейшим изучением битрикса, лишь только потому, что на рынке его спрос неплохой и есть возможность побыстрее стартануть в разработке?

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

    Что то понять можно, но... Давно я гуглил вопросы а можно научиться боксировать дома?Сейчас для меня этот вопрос смешной, так как в боксе нужен именно партнер. Аналогично и здесь, развиваться вы будете быстрее на работе и с реальными задачами.
    Надо выходить из зоны комфорта.
    Ходить на собеседования и постоянно учиться.
    Ответ написан
    Комментировать
  • Кто знает хорошие уроки про PHP,MVC?

    agoalofalife
    @agoalofalife
    Team Lead
    Возьмите какой-нибудь фреймворк: Laravel или Symfony
    - Прочтите несколько раз документацию
    - Сделайте прошлую или новую задачу с ним
    - Найдите работу или настоящие задание
    Заработаете денег, получите реальный опыт. Можно устроиться стажером.
    - Продолжайте дальше читать и изучать новое.
    - Учите английский язык
    Ответ написан
    Комментировать
  • Какую книгу посоветуете по PHP?

    agoalofalife
    @agoalofalife
    Team Lead
    Могу порекомендовать в дополнение
    Зандстра Мэт PHP. Объекты, шаблоны и методики программирования
    Ответ написан
    Комментировать
  • Как эффективно чему либо учиться, как изучают новые вещи(программирование в том числе)?

    agoalofalife
    @agoalofalife
    Team Lead
    Даже путь в тысячу ли начинается с первого шага.
    Ответ написан
    Комментировать
  • Как правильно выносить логику из моделей?

    agoalofalife
    @agoalofalife
    Team Lead
    Во-перых репозитории не бесполезны.
    Во-вторых все что придумали или придумывают имеет смысл, но не везде и не всегда.

    Если у ваc простое CRUD приложение, зачем вам нужны сервисы?
    Скорее всего вы хотели разгрузить контроллеры и фактически перенесли просто код из одного местов в другое.
    И какой код может быть общий, если это просто CRUD.
    В Eloquent уже есть вся магия для создание crud
    User::create()
    User::update()
    User::find()

    Если у вас что-то больше, до значит какая то бизнес - логика все же есть.
    Я вижу два пути:
    - Это читать статьи и книги по архитектуре, подойдет Фаулер, Эванс Эрик, Вернон Вон..Раз вас тянет туда по можете параллельно этим заниматься
    - Просто писать дальше в духе Laravel, но первое второму не мешает.
    Для начала еще эту прочитать.
    Если все прочтете много раз, вопросов станет еще больше, дерзайте!
    Ответ написан
    2 комментария
  • Можно ли подключить телеграм бота на rest api?

    agoalofalife
    @agoalofalife
    Team Lead
    Хороший вопрос - это уже половина ответа. Да вы можете интегрировать бота в свой сервер.
    От telegram вам надо будет получить token, а telegram от вас надо будет получить url(webhook) куда они будут отправлять различные события и данные.
    Соответственно - далее вы уже на свое усмотрение реализовываете обработку.
    Ответ написан
    Комментировать
  • Как вывести название автомобиля один раз и настроить взаимозависимость select(база данных в mysql)?

    agoalofalife
    @agoalofalife
    Team Lead
    Начальный вариант это нормализованные таблицы
    Например:
    - Таблица car_make
    - Таблица car_model
    Где в car_model есть поле car_make_id, это внешний ключ и он уже имеет индекс.
    Далее вы выводите список(form select) из вашей таблицы или поиском(пользователь вводить начало названия) по таблице в car_make
    Пользователь выбирает определенную марку, в таблице car_model вы можете по id выдать список всех моделей.
    Что касательно дат, реализовать можно по разному.
    В вашем файле у вас фиксированный диапазон и его можно добавить в таблицу car_model двумя колонками.
    Если модель может иметь несколько диапазонов выпуска, можно это хранить в отдельной таблице, где поля будут такие:
    car_model_id, start_date, finish_date
    Соответственно при выборе в интерфейсе определенной модели, мы можем выбрать список с диапазонами дат.
    Правильных ответов тут нет, и зависит от целей, какие могут быть перспективы и так далее.

    Например в одном моем проекте был похожий функционал. И использование такой формы, показало что разные марки и модели могут по-разному вводиться пользователями, для примера есть лада и ваз.
    И пользователь будет вводить всегда свою версию.
    В таком случае для каждой модели и марки пришлось заводить отдельные таблицы - словари.
    Где версия пользователя, хранила ссылку на стандартную версию.
    То есть у нас была Лада.
    Соответственно:
    ВАЗ = Лада
    Лада = Лада
    Kalina - Калина
    Ответ написан
    Комментировать
  • Стоит ли создавать сообщество начинающих программистов?

    agoalofalife
    @agoalofalife
    Team Lead
    Сообщество - как и все остальное надо будет поддерживать.
    Стоить учесть что ваш энтузиазм не все будут разделять и возможно он может пропасть, так как часть вашего времени и энергии уйдет на поддержку вашего сообщества.
    У людей не будет перед вами обязательств, так что в реальности все будут забивать.

    Можете конечно попробовать, но целью будет скорее:
    - Общение
    - Прекрасное времяпровождения
    - Обмен опытом(небольшим но все же)
    - Новые знакомства

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

    agoalofalife
    @agoalofalife
    Team Lead
    Исходить надо из того какая у вас стоит задача:
    - Обычный сайт с серверным рендором
    Это старая схема, где в Laravel для этого все есть. И базовая аутентификация через cookie и хранением сессий в разных местах.
    - Сайт с отдельным клиентом
    Тут бэкэнд обычно разделен от фронтенда. От бэкэнда нужно api(restful, graphql), клиент уже реализовывается как правило на js.
    Тут уже может потребываться токен.
    - Сайт с не одним клиентом
    Тут может быть и сам сайт, и может мобильное приложение и любой другой, которой использует API бэкэнда.
    Тут Passport более востребован но не обязателен.
    - Сайт с требованием выдавать доступ сторонним клиентам
    Тут Passport необходим

    Проще говоря Passport берет на себя работу по организации аутентификации и авторизации внешних клиентов в ваш бэкэнд и вытекающие из этого последствия:
    - хранение
    - шифрование
    - авторизация
    - управление
    - реализация Auth2.0

    Для просто API laravel рекомендует sanctum
    Ответ написан
  • Как использовать artisan команды при создании пакета Laravel 7?

    agoalofalife
    @agoalofalife
    Team Lead
    Рассмотрим пример когда вы разрабатываете свой пакет локально.
    В корне проекта создается папка и добавляется запись в composer.json вроде такой
    "repositories": [
        {
          "type": "path",
          "url": "author/package"
        }
      ]

    Подробнее можно прочитать здесь в документации
    При такой настройке, пакет создаст ссылку в vendor.

    По поводу стандартных команд в Laravel(artisan) тут все индивидуально, к примеру, миграцию можно добавить ваш пакет такой командой
    php artisan make:migration name_migration --path=author/package

    В команде по созданию factories, за корень берется databasePath, выйти из ситуации след образом.
    - В зависимости от контекста менять базовый путь
    - Отнаследоваться или создать свою команду для формирования пути при создании фабрики

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

    Еще можно воспользоваться консолью:
    php artisan make:controller OurController && mv app/Http/Controllers/OurController.php author/package/pathWhereControllerStore

    Соответственно можно создать алиас и писать меньше, а можно скрипт, где будет еще изменяться namespace в соответствии с вашим пакетом.
    Ответ написан
    Комментировать
  • Какую админ-панель в Laravel выбрать?

    agoalofalife
    @agoalofalife
    Team Lead
    Из бесплатных могу вам порекомендовать orchid
    Перечислю плюсы:
    - Хорошо поддается кастомизации
    - Бесплатен
    - Документация на русском + разработчик тоже русский(я не приверженец только русского, наоборот за все английское) но часто напрямую обращался к разрабу решал какие то вопросы, на русском было конечно проще.
    - Отличная поддержка, регулярно обновляется и telegram постоянная движуха.
    - Из коробки есть сортировка, фильтры
    - Из коробки некий свой UI Kit которой сводит к минимуму трату времени на отрисовку интерфейса
    Минусы:
    - Свой подход к разработке и термины, надо потратить время для изучения, но это такое, любое решение требует время для изучения.

    Остальное можете прочитать в документации.
    Ответ написан
    2 комментария
  • Стоит ли выбирать mongoDB?

    agoalofalife
    @agoalofalife
    Team Lead
    Для данных с большим кол-ом связей подходит лучше реляционные базы данных, потому что много связей как правило порождают или находятся рядом с :
    - Со сложными запросами где очень хорошо помогает SQL
    - Большим кол-ом данных, где регламентированная структура только улучшит поддержку
    - Потребность в транзакциях
    Отступая от выше изложенного, так как это учебный проект, то лучше потренироваться опять же на реляционное базе.
    А для опыта сделать два проекта на разных базах, и прочувствовать всю разницу не на словах, а на деле.
    Ответ написан
    1 комментарий
  • Можно ли использовать один метод для 2-х роутов?

    agoalofalife
    @agoalofalife
    Team Lead
    С точки зрение работы кода, у вас по двум маршрутам, обрабатывается request в одном контроллере и в одном методе, работать конечно будет.
    Но с точки зрения кода - это конечно не perfect. Тут как в классике, "Все смешалось в доме Облонских".
    - Контроллер кончено ж должен быть другой, и в данный момент не потому что просто так должно быть, а просто название route и контроллера вызывают диссонанс в первую очередь.
    - Во вторых есть такой термин как REST API, и в духе Laravel больше подходит метод show, документация

    Еще мне не нравиться ваш namespace Front, и есть ощущение что он больше не нужен, чем нужен.
    И наверное category всегда лучше чем cat или c.
    Еще можете прочитать про resources

    Ну и главное, про сокращение кода:
    - "Чтобы не создавать еще метод"(где-либо)
    - Чтобы не создавать еще класс
    - Чтобы не создавать еще таблицу в базе
    - Чтобы не создавать еще ...
    Более вероятно будет приводить к плохому коду и путаницы. Мало кода это не равно хороший код. В коммерческой разработке часто очень большая предметная область, с этим надо работать, поддерживать и тому подобное - это порождает больше кода, потому что:
    - Лучше (иногда) создать еще метод
    - Лучше (иногда) вынести в отдельный класс
    - Лучше (иногда) нормализовать и вынести в отдельную таблицу
    Advice - Прочтите документацию Laravel✌️
    Ответ написан
    Комментировать
  • Слетела базза данных что делать?

    agoalofalife
    @agoalofalife
    Team Lead
    Для последующих недоразумений хранить весь код в git на удаленных серверах, например bitbucket.
    phpmyadmin это просто интерфейс для работы с базой данных.
    Вам надо было настроить постоянный экспорт и хранить его в другом месте(например в облаке а лучше в двух)
    Если переустанавливали OS то скорее всего данные все стерлись, хотя на сколько я помню иногда можно переустановить оставив старые данные.
    Ответ написан
    1 комментарий
  • Laravel 5.2 - как отправить письма через очередь, через отдельный коннектор?

    agoalofalife
    @agoalofalife
    Team Lead
    Все же написано в докуменатции

    Можно через helper dispatch(new App\Jobs\SendEmail);
    В контроллере
    $job = (new SendEmail($user))->onQueue('emails');
    $this->dispatch($job);

    Если надо указываете connection.
    Если надо указываете очередь onQueue, оформляя все это в цепочку.

    ну далее например настраиваете supervisor
    Ответ написан
    Комментировать