• Как сгруппировать checkbox по их сущностям?

    iit
    @iit
    TeamLead + php/js разработчик
    Самый простой вариант - пройтись по ним циклом

    $permissions =  Permission::all();
    
    $permissionEntity = [];
    foreach($permissions as $permission){
        if(!isset($permissionEntity[$permission->entity]){ 
                $permissionEntity[$permission->entity] = [];
        }
        $permissionEntity[$permission->entity][] = $permission;
    }


    @foreach($permissionEntity as $entity => $permission)
        <h4>{{ $entity }}</h4>
        <div class="form-group">
            <div class="col-lg-10">
                <input {{ in_array($permission->id, $rolePermissions) ? "checked" : null }} name="permissions[]" value="{{   $permission->id}}"  type="checkbox" />{{ $permission->name}}
             </div>
        </div>
    @endforeach
    Ответ написан
    Комментировать
  • Колледж или 11 для программиста?

    iit
    @iit
    TeamLead + php/js разработчик
    В свое время не было денег на колледж и по этому пошел в 10 класс (можно было уйти после 9-ого).

    В основном 10 и 11 это подготовка к ЕГЭ.
    После 10 пошел в колледж и так был тот-же самый паскаль, основы c++ и asm и самые основы
    - алгебралогики
    - алгоритмы
    - блок-схемы
    - структуры данных
    - базы данных
    - операции над данными

    В мои времена не было гугла чтобы эти знания получить самому. Но уже на 2-м курсе я понял что Delphi (ObjectPascal) это не то на чем можно заработать, нужно учить другие языки.
    Кто-то учил Java, кто-то Python, один парень ActionScript (Flash), был даже один Гений который грыз ассемблер а я начал изучать PHP/JS.

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

    Лучше найти в сети книги у курсы и заниматься по ним (тем более все равно придется) например сейчас грызу графовые базы ( OrientDB ) на Udemy и параллельно ковыряю express.js + mongoDb.

    Так что образование нужно только для того чтобы тебе разжевали базовые знания и теорию. Если теория и базовые знания есть - то оно больше для галочки (Крупные компании любят чтобы у всех сотрудников было высшее образование)

    Так изучай рынок вакансий в своем городе и изучай то что они требуют.

    PHP/JS - это быстрый старт, за пол-года реально изучить и устроиться junior/freelancer (веб-макакой)
    Python сейчас тренд для анализа данных и нейронок - но это не для слабаков, 2-3 года придется вникать в это все, зарплаты в среднем на 30% больше чем у веб макак.
    Java - это банковский сектор, крупные enterprise решения ну и Android. По сложности не сильно сложнее Python но устроиться труднее, правда позиции и оклад очень вкусные.
    Ответ написан
  • Mysql php, как взять определенные столбцы?

    iit
    @iit
    TeamLead + php/js разработчик
    Вариант без js

    Сперва сделать array со списком столбцов
    Вывести get запросом страницу с формой и пустой таблицой где вывести checлbox на каждый столбец.

    Форма посылает post запрос со списком столбцов.
    1 - Список столбцов сохраняем в сессию.
    2 - Делаем запрос в базу по списку столбцов из сессии.
    3 - Выводим снова форму, отмечаем выбранные чекбоксы и выводим таблицу с данными.

    Вариант с js

    Инициализируем json объект хранилище со списком всех столбцов которые по умолчанию false
    На клик по checkbox вешаем событие которое
    1 - изменяет состояние объекта с false на true
    2 - сохраняет объект в localstorage

    На кнопку выборки вешаем событие которое через ajax отправляет список столбцов на сервер
    1 - на сервере преобразуем json в фккфн делаем array_filter по true
    2 - по отфильтрованным столбцам делаем выборку из базы
    3 - отправляем json на фронт
    4 - получаем ответ api
    5 - выводим данные в таблицу
    Ответ написан
  • Отходит штекер у новых новых наушников, в чем проблема и что делать?

    iit
    @iit
    TeamLead + php/js разработчик
    Если сохранился чек или гарантийный талон тогда лучше попробовать поменять. Если поменять не выйдет - тогда можно и запарится с ремонтом если жалко денег на новые.

    Если все-таки самодельный ремонт - тогда разобрать корпус и отрезать штекер.
    Прозвонить штекер и провод тестером и заменить неработающий провод/штекер. Берем паяльник зачищаем концы, лудим и паяем.
    Место соединения пайки в наушниках залить термоклеем.
    Место соединения провода и штекера закрепить термоусадочной трубкой
    И в принципе готово.

    Но как по мне лучше не парится и взять новые или поменять - при покупке взять с собой плеер/ноут и проверить на месте что все норм.
    Ответ написан
    3 комментария
  • Как отобразить информацию о нужном товаре, используя JSON API?

    iit
    @iit
    TeamLead + php/js разработчик
    id краткой и полной информации совпадают на сколько я понял.

    В принципе можно на фронте создать дополнительную страницу
    item/:id/details в этом и при показе страницы item/:id подставлять в details id из страницы самой карточки на ссылку подробнее.

    Лучше конечно инициализировать объект - хранилище в котором можно сохранять таки промежуточные результаты. Особенно если id не будут совпадать.

    var window.my-store.card.id = <текущий объект>

    Сам же использую уже готовое решение чтобы не городить велосипеды в виде https://nuxtjs.org
    Там сразу и готовый фронт-сервер для PWA с поддержкой SSR и Vue.js + VueX (то самое хранилище) и еще UI-kit один из 5 на выбор (например есть киты c material design и bootstrap).
    Ответ написан
    Комментировать
  • Как называется такая аутентификация и как выбрать правильный способ?

    iit
    @iit
    TeamLead + php/js разработчик
    Все зависит от того кто и как будет обращаться к backend.

    Если это другой сервер, мобильное приложение или SPA то лучше использовать токены - JWT как самый распространенный вариант.

    В случае обычного сайта или SPA возможно использовать сессии.

    Если используем обычные статические страницы + http api тогда сессия вполне нормальный вариант в том числе и для приложения по типу web-view.

    Если используем SPA с REST api / Graphql тогда токены удобнее.

    Что касается где хранить id пользователя в токене то самом JWT есть заголовок для этого. Вообще Jwt это 2 json + хэш/ключь слепленные вместе через base64.

    Первый json - служебный в нем идет алгоритм и тип ключа, второй - настраиваемый и может содержать что угодно, правда для некоторых моментов например id токена (jti) или id сессии (sid) есть предопределенные заголовки. Полный их список тут

    В вашем случае есть 2 варианта

    1 - доступ по сессии
    API и SPA требует сессию для защищенных методов, авторизация эту сессию предоставляет. Авторизация - может быть выполнена как обычной статической html с формой так и отдельным SPA.

    2 - доступ по токену
    В этом случае Авторизация реализуется в виде api на стороне сервера, и в виде токена
    + формы + логики авторизации на стороне клиента (Vue). Если токен есть - тогда есть доступ, если нет - то доступ только к методам регистрации и авторизации.
    Чтобы не палить код той части приложения где есть логика и фронт закрытой части - можно использовать code-splitting - сперва подгружается форма авторизации а остальное грузиться тогда когда это нужно.

    Есть правда еще более извращенные варианты вроде SPA с SSR на том-же Nuxt/Next/Express где пользователю токен а бэку на Go/JAVA/PHP уже токен приложения + токен пользователя.
    Иногда стоит использовать OAuth2.0 и LDAP которые тоже довольно интересны.
    Первый хорош на все случаи жизни, но только если используется куча связанных приложений/микросервисов а второй просто рай для бизнес-пользователей с Windows для какой-нибудь коробочной CMS.
    Ответ написан
    Комментировать
  • Как получать результаты php-файла по частям?

    iit
    @iit
    TeamLead + php/js разработчик
    Проблема медленной загрузки не в js и даже не в php а в api/бд которые дергает
    checkLibraryOne и checkLibraryTwo.

    Если используется база - тогда оптимизируем её, если api - тогда
    - Кешируем ответы api
    - Создаем отдельные точки вызова для каждого метода
    - Создаем объект в котором будет храниться список библиотек
    - Создаем на каждую точку свой ajax запрос который модифицирует список
    - При модификации списка обновляем и сам dom
    - Если список пуст и запросы еще pending - тогда показываем spinner чтобы все видели что мы что-то грузим
    Ответ написан
  • Почему Ajax срабатывает только со второго раза?

    iit
    @iit
    TeamLead + php/js разработчик
    При загрузке страницы по какой-то причине jquery событие не связанно с формой следовательно

    $('.form form').submit(function(e) {
    ...

    Не отрабатывает

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

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

    Как костыль могу посоветовать навесить отдельный обработчик на саму кнопку дабы он всегда перехватывал событие по умолчанию и вызывал submit на самой форме
    Ответ написан
    1 комментарий
  • PHP ORM для бизнес приложений?

    iit
    @iit
    TeamLead + php/js разработчик
    Все зависит от размера проекта и фреймворка. Если проект не большой то подойдут laravel с Eloquent. Отдельно ставить Eloquent смысла мало он всеровно затянет половину ядра laravel.

    Если проект уже среднего размера тогда подойдут Symfony + doctrine. Правда для того что работать с ними нужно достаточно много знать один dql чего стоит.

    Если же проект огромный и дико нагруженный то есть смысл попробовать сделать его не на php а например на java + spring + hybernate.

    Ещё советую попробовать ddd и можно будет в любой момент поменять laravel на symfony а eloquent на doctrine или на тот же propel
    Ответ написан
    2 комментария
  • Почему не выводятся данные из БД?

    iit
    @iit
    TeamLead + php/js разработчик
    Эх, если бы еще и сам main.tpl дать =)
    А так пока вижу 2-е небольшие проблемы, которые не относятся к теме, но все-же
    1)
    class template_class{
    var $values = array();
    var $hrml; // тут hrml а должно быть html
    2)
    Если бы этот код даже если бы и вывел пост - то только один
    while($row = $result->fetch_row()){
    $tpl->set_value('PUB_NUM', $row['id']);
    }

    А вообще лучше готовые шаблонизаторы использовать - тот же twig например
    Ответ написан
  • Как долго может фильтроваться такой файл?

    iit
    @iit
    TeamLead + php/js разработчик
    Время зависит от производительности сервера, но одно скажу точно - достаточно, чтобы отвалиться по timeout.
    У меня была похожая задача, правда был один xml а не два csv, в итоге я загнал данные в postgres и уже там обрабатывал sql запросами.

    searchForSku можно заменить простой конструкцией
    array_search($sku, array_column($array,'sku')) если php > 5.5.0
    Ответ написан
    4 комментария
  • Насколько плохо echo внутри метода?

    iit
    @iit
    TeamLead + php/js разработчик
    Если вы используете фреймворк то шаблон должен выводится средствами фреймворка.

    Если самописка то в проекте должен быть только один финальный echo который выводит уже готовый шаблон.

    echo на прямую в контролере - однозначно зло.
    Ответ написан
    Комментировать
  • Как лучше спроектировать структуру приложения на Laravel 5.1?

    iit
    @iit
    TeamLead + php/js разработчик
    Можно и так, однако сам бы использовал бы для этих целей mongodb или postgres+json иначе выйдет на каждую категорию по таблице а это уже довольно муторно реализовывать, eav конечно выход если хранить сущность как набор параметров, однако nosql или postres+json подойдет для этого лучше. Тем более в ветке 5x ввели запросы для полей типа json. В итоге можно составить несколько схем и фильтровать по параметрам в json схеме. Тогда можно обойтись одной моделью но с кучей фильтров.
    Ответ написан
  • Как сделать звуковые уведомления на сайте?

    iit
    @iit
    TeamLead + php/js разработчик
    У меня знакомые встраивали тэг аудио на сайте и запускали при событии js правда не для уведомлений.
    Ответ написан
    Комментировать
  • Yandex почта отправка mail php?

    iit
    @iit
    TeamLead + php/js разработчик
    1) Проверить правильно ли настроен mail на сервере, в худшем случае вас банят и письма не доходят либо почтового сервака нет от слова совсем, в плохом они ложатся в спам и во входящих из не видно либо вы в спам списках откуда можно отписаться
    2) Проверить правильность почты менеджеров
    3) Проверить менеджеров, бывали случаи когда менеджер специально говорил что письма не доходят и страдал фигней.

    А вообще лучше использовать swiftmailer либо api например mandril либо mailgun а может даже amazone ses.
    Идеальный вариант когда лиды ложатся сразу в crm. Если нету crm то менеджеры спокойно могут кидать отмазки. А так сразу видно где проблемы и еще и KPI продажников.
    Ответ написан
    Комментировать
  • Чем плохи фасады?

    iit
    @iit
    TeamLead + php/js разработчик
    Вообще ничего плохого в их использовании не вижу, однако сам всегда использую функцию app('class') или app()->make('class') - оно нагляднее отображает что я беру объект не откуда-то а из IOC, в то время как фасад можно спутать с обычным статическим классом.

    Хотя можно совсем извратится и писать Container::getInstance()->make('class', []); но не рекомендую, кто знает когда Тйэлор перепишет хелпер app =)

    Кто скажет что статика это зло - смотрим исходники laravel

    if (! function_exists('app')) {
        /**
         * Get the available container instance.
         *
         * @param  string  $make
         * @param  array   $parameters
         * @return mixed|\Laravel\Lumen\Application
         */
        function app($make = null, $parameters = [])
        {
            if (is_null($make)) {
                return Container::getInstance();
            }
    
            return Container::getInstance()->make($make, $parameters);
        }
    }
    Ответ написан
    Комментировать
  • Минимальный набор элементов для отправки письма с сайта?

    iit
    @iit
    TeamLead + php/js разработчик
    Если на сервере корректно настроен sendmail то можно просто фунцией mail однако настроить его самому достаточно сложно, особенно так, чтобы письма не уходили в спам.
    На многих хостингах sendmail настроен кое-как, но крупные обычно настраивают нормально.

    Поэтому есть множество способов отправить письма - первое это установить готовое решение почтового сервера и слать через него, их настраивать чуток проще. Второй вариант завести почту и слать через эту почту. И третий воспользоваться api почтовых систем например
    ExpertSender
    Mailgun
    Mandril
    Или AWS прослойку для почты.

    На работе используем почтовый сервер для одного проекта, даже с цифровой подписью. Для другово exSender.

    Сам лично использую Mailgun и smtp через почту вроде noreply@mysite.my где к домену привязан gmail для бизнеса, на одного человека 4$ в месяц.

    В итоге самый простой вариант - используем как посоветовал Дмитрий swiftmailer подключаем его к smtp к готовой почте и радуемся. Либо тестируем mail, причем тоже через swiftmailer и пинаем хостеров чтобы сделали нормальную почту.
    Ответ написан
    Комментировать
  • Кто-то сталкивался с проблемой деплоя проекта на Laravel?

    iit
    @iit
    TeamLead + php/js разработчик
    Похоже что хостинг вывалил роуты на страницу, есть идея что файл routes содержит в начале <? вместо <?php и на серверном пыхе выключена директива "allow short tags" в итоге вместо подключения и исполнения файла вываливается его содержимое.

    Другой причины я не могу придумать
    Ответ написан
  • Как правильно настроить rewrite в nginx?

    iit
    @iit
    TeamLead + php/js разработчик
    Использую laravel и lumen для них подходит что-то вроде этого
    server {
        listen 80;
        server_name some.site.my;
    
        root /var/www/some.site/web/public;
    
        index index.html index.php;
    
        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    
        location / { 
            try_files $uri $uri/ /index.php?$query_string;
        } 
    
       error_log /var/www/some.site/web/logs/error.log;
    
    }
    Ответ написан
    1 комментарий
  • Как один раз инициализировать CURL для всех методов в классе?

    iit
    @iit
    TeamLead + php/js разработчик
    Вынести инициализацию curl в конструктор объекта а сам ресурс в protected свойство класса
    class SomeController{
    
        protected $curl;
    
        public function __construct($url){
            $this->curl = curl_init($url);
        }
    
    }
    Ответ написан
    Комментировать