使用Laravel Scheduler时,视图不会导出到文件

时间:2019-01-15 15:38:14

标签: php laravel laravel-scheduler

我有php文件模板,需要填充一些数据并导出为“ rendered_view.php”。它需要每天自动完成。所以我正在尝试使用Laravel Scheduler。

所以我有:

查看“ 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');

Console / Kernel.php

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

方案1:如果我导航至 127.0.0.1:8000/testRenderView ,则该文件正在运行,并且render_view.php文件保存在公用文件夹中,并包含预期内容:

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

方案2:如果由调度程序执行(在13:00),则返回错误:

  

local.ERROR:照亮\ View \ Engines \ PhpEngine :: main():打开失败   必需的'includes / php_file.php'(include_path ='.:')   {“例外”:“ [对象]   (Symfony \ Component \ Debug \ Exception \ FatalErrorException(代码:64):   Illuminate \ View \ Engines \ PhpEngine :: main():需要打开失败   'includes / php_file.php'(include_path ='.:')

Laravel就像从Scheduler中执行时一样,尝试将视图呈现为真实视图。 我也尝试创建工匠命令,但是行为是相同的。当我在控制台上执行命令时,效果很好,但是从Scheduler调用命令时效果不佳。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

与其创建一个像(new MiscController())->testRenderView();这样的新控制器,不如在这里做您的逻辑并将其替换为file_put_contents(resource_path('myfile.php'), view('myview')->render())

我刚刚对其进行了测试,并且可以正常工作。

您不应该像您一样尝试在调度程序中创建控制器,因为理想情况下它们需要某种请求。最好只创建带有某些功能的新类。