Один код для web и console

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Один код для web и console

Сообщение fly2k »

Ку!

Вот есть код заполнения какой-то таблицы из интернета(с другого сайта). Те есть, парсим контент, создем модели, записываем в базу. И нада бы сделать так, чтобы и из консоли(в основном) пущать, и, может быть, с каким то расширенным интерфейсом из веба.
Слышал что в Yii2 на эту тему что-то улучшили. В Yii1 я делел, подозреваю что коряво, что-то типа того:

Код: Выделить всё

class ImportCommand extends CConsoleCommand
{

    public function actionImport($filename)
    {
        $m = Yii::app()->getModule('mymodule');
        $c = new MyController('MyController', $m);

        if($result = $c->importFile($filename)) {
              // рисуем консольную вьюху :)
...
А как делать правильно? Чтобы и в консоли, скажем, обеспечить интерактив как в вебе с мин.затратами... Где основной код импорта писать? Как подключать в консоли и вебе? Как с вводом/выводом работать? Там же если что-то на диск(ФС) писать, то еще и права разные могут быть...

Спасибо!
// Yii2Rulez!
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: Один код для web и console

Сообщение nizsheanez »

1) Просто запихните общий код в Модели, а не общий в контроллер и комманду.
2) Основной код пишите в модели - он одинаковый везде.
3) Не нужно создавать контроллер в контроллере.
4) "Как с вводом/выводом работать?" - что?
5) Прав не может быть разных. Если права разные - то вы что-то делаете не так. Если у вас из веба работает скрипт под пользователем www-data:www-data, то и в консоли все скрипты должны работать из под него. Например так: "sudo -u www-data php some/php/script.php --arg1=val". Либо запускайте комманды в таком стиле, либо если используете cron, то каждый пользователь имеет свой crontab файл и все комманды из него запускаются под нужным пользователем, почитайте про crontab.
6) В Yii2 много общего между консольными и вебовскими контроллерами, но это по прежнему 2 разных класса, так что просто-так пускать вебовские контроллеры из cli тоже не получится, да и не нужно. В cli все гда есть то чего нет в вебе, в вебе всегда есть то чего нет в cli, и не нужно пытаться это объединять, многое потеряете.
Ответить