• Как исполнять root-level команды с PHP?

    R0dger
    @R0dger
    Laravel/Yii/2 AngularJs PHP RESTful API
    смотрите в сторону shell-exec
    + sudo. Но я бы не рекомендовал такой подход. вы практически добавляете уязвимость, злоумышлениик меняет Ваш скрипт, а вы его запускаете от root
    Ответ написан
  • Как правильно вносить данные в БД?

    Так как локальные данные запрашиваются через свой API, то я бы это реализовал по похожему принципу, как работает кеширование. По запросу данных из вашего API, происходит проверка на то, как давно данные обновлялись. Если давно (регулировка времени на своё усмотрение), то происходит запрос на сторонний сервис и данные в локальном хранилище обновляются и сохраняется время последнего обновления. Минус этого подхода в том, что первый запрос в некий промежуток времени будет обрабатываться дольше из-за всех операций.

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

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

    @McBernar
    Пробрасываете из модели ошибку. Именно модель работает с компонентами валидации.
    Ловите ошибку в контроллере.
    Рендерите эту ошибку вместе с вьюшкой.
    Ответ написан
    1 комментарий
  • Как запустить виджет depdrop?

    slo_nik
    @slo_nik Куратор тега Yii
    Доброе утро.
    Вы текст ошибки, для начала, переведите и исправьте её, потом будете двигаться дальше.

    P.S.
    Как я понимаю файл который я указал /site/region должен быть grid таблица или нет

    Вы смотрели примеры в документации виджета? Вы увидели там grid?
    Указав адрес /site/region Вы во-первых, обращаетесь к контроллеру SiteController, во-вторых, к действию этого контроллера actionRegion.
    Вам надо получить данные всех регионов из базы.
    Для этого достаточно обратиться к базе и получить регионы. Из этого объекта widget создаст выпадающий список в форме.
    Объяснил как мог.

    P.S.S Если Вы не знаете буржуйский язык, то добрый google позаботился об этом, есть автоматические переводчики, первый по адресу translate.google.com, второй Вы можете найти в магазине браузера google-chrome.
    Пользуйтесь или первым или установите расширение в браузер.
    Это первое.
    Второе.
    Открываете документацию виджета и переводя текст при помощи переводчика пытаетесь разобраться.
    Рассмотрим параметр "url"
    В документации сказано:
    url: string The url string for the controller action that will return the Json encoded dependent dropdown data via ajax.

    Ага, переводим переводчиком
    URL: Строка URL Строка для действия контроллера, который будет возвращать Json закодированные зависимые данные выпадающие с помощью AJAX.

    Вот, какой-то неведомый зверь ajax нам встретился. И вдобавок json... Непонятно... Ладно, посмотрим примеры...
    И в примере находим строку
    echo Json::encode(['output'=>$data['out'], 'selected'=>$data['selected']]);
               return;

    Вот, как раз actionProd.
    Нет никакого подключения файла, только использование какого-то неведомого метода getProdList() с параметрами.
    В комментарии читаем:
    /**
    * the getProdList function will query the database based on the
    * cat_id and sub_cat_id and return an array like below:
    * [
    * 'out'=>[
    * ['id'=>'', 'name'=>''],
    * ['id'=>'', 'name'=>'']
    * ],
    * 'selected'=>''
    * ]
    */

    Переводим:
    функция getProdList будет запрашивать базу данных, основанную на
    * cat_id и sub_cat_id и возвращает массив, как показано ниже:

    Ага, вот где собака порылась!!!
    Значит надо в методе написать запрос к моей базе данных, к таблице "как_там_она_называется" и получить регионы.
    И при помощи
    return Json::encode()
    отдать виджету.
    Всё.
    Как написать запрос - подумайте сами. Вот Вам ссылка на документацию для разбирательства.
    Ответ написан