Представление не экспортируется в файл при использовании планировщика Laravel - PullRequest
0 голосов
/ 15 января 2019

У меня есть шаблон php-файла, который мне нужно заполнить некоторыми данными и экспортировать как «rendered_view.php». Это нужно делать автоматически каждый день. Поэтому я пытаюсь использовать Планировщик Laravel.

Итак, у меня есть:

Просмотр"view_to_render.blade.php"

<?
    $someVariable = "{{$variable}}";
    require_once("includes/php_file.php");
?>

Контроллер"MiscController.php"

public function testRenderView(){
    file_put_contents(public_path('rendered_view.php'), view('view_to_render', ['variable' => '123456'])->render());
}

Маршрут

Route::get('testRenderView', 'MiscController@testRenderView');

Консоль / Kernel.php

$schedule->call(function() {
    (new MiscController())->testRenderView();
})->daily()->at('13:00');

Сценарий 1: Если перейти к 127.0.0.1: 8000 / testRenderView , он работает, и файл rendered_view.php сохраняется в общей папке с ожидаемым содержимым:

<?
$someVariable = "123456";
require_once("includes/php_file.php");
?>

Сценарий 2: Если он выполняется планировщиком (в 13:00), он возвращает ошибку:

local.ERROR: Подсветка \ Просмотр \ Двигатели \ PhpEngine :: main (): Ошибка открытия Обязательный 'include / php_file.php' (include_path = '.:') { "Исключение": "[объект] (Symfony \ Component \ Debug \ Exception \ FatalErrorException (код: 64): Подсветка \ Просмотр \ Двигатели \ PhpEngine :: main (): не удалось открыть 'includes / php_file.php' (include_path = '.:')

Похоже, когда он выполняется из планировщика, Laravel пытается отобразить представление как реальное представление. Я также пытался создавать команды ремесленников, но поведение такое же. Работает нормально, когда я выполняю команду на консоли, но не работает, когда я вызываю команду из планировщика. Есть идеи, почему это происходит?

1 Ответ

0 голосов
/ 15 января 2019

Вместо создания нового контроллера, такого как (new MiscController())->testRenderView();, просто выполните здесь свою логику и замените его на file_put_contents(resource_path('myfile.php'), view('myview')->render()).

Я только что проверил это, и оно работает.

Вы не должны пытаться создавать контроллеры в планировщике так же, как вы, потому что в идеале им нужен какой-то запрос. Вам лучше просто создать новый класс с некоторыми функциями.

...