Консоль, сохранение XML файла

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

Консоль, сохранение XML файла

Сообщение webplus »

Здравствуйте!
Хочу сделать чтобы по крону запускалось консольное приложение и генерировать XML и сохранять его на хостинге.
Почитал перед тем как делать: https://github.com/samdark/yii2-cookboo ... l-response
и вот что сделал:

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

<?php
namespace console\controllers;

use frontend\modules\cabinet\models\Vacancy;
use Yii;
use yii\console\Controller;

Class XmlController extends Controller
{
    public function actionVacancy()
    {
        Yii::$app->response->format = \yii\web\Response::FORMAT_XML;

        $model = Vacancy::find()->all();

        return file_put_contents(Yii::getAlias('@frontend/web/xml/vacancy.xml'),$model);
    }
}
но код при запуске в консоли выдает ошибку: 'Setting unknown property: yii\console\Response::format'
Также есть сомнения по поводу: return file_put_contents(Yii::getAlias('@frontend/web/xml/vacancy.xml'),$model);

В общем как правильно сделать сохранение данных в XML файл?
Сайт по работе в Украине: https://jobis.com.ua/. Сайт по поиску строителей: https://stroyzakaz.com.ua/
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Консоль, сохранение XML файла

Сообщение urichalex »

В консольном приложении не нужно устанавливать формат ответа
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Консоль, сохранение XML файла

Сообщение Nex-Otaku »

Первое. Тебе нужно вынуть данные из модели. Это легко.

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

$data = $model->attributes;
Второе уже сложнее. Отрендерить массив в XML.

Простой топорный способ - сделать вьюшку, передать туда параметром массив и отрендерить её.

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

$view = new View();
$xmlContent = $view->render('@common/views/xml-template', ['data' => $data]);
Сама вьюшка будет выглядеть примерно так:

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

<vacancy>
    <?php foreach ($data as $name => $value): ?>
    <<?= $name ?>><?= Html::encode($value) ?></<?= $name ?>>
    <?php endforeach; ?>
</vacancy>
Ну а дальше просто пишем в файл.

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

file_put_contents($path, $xmlContent);
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Консоль, сохранение XML файла

Сообщение futbolim »

Правильно с помощью DOMDocument
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Консоль, сохранение XML файла

Сообщение zelenin »

futbolim писал(а): 2017.10.18, 20:10 Правильно с помощью DOMDocument
ну только если xmlwriter не знаем.
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Консоль, сохранение XML файла

Сообщение Nerf »

zelenin писал(а): 2017.10.18, 21:44
futbolim писал(а): 2017.10.18, 20:10 Правильно с помощью DOMDocument
ну только если xmlwriter не знаем.
В чем соль? Если критично к скорости и RAM, то да. Но с DOMDocument приятней работать.
Ответить