我有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调用命令时效果不佳。知道为什么会这样吗?
答案 0 :(得分:0)
与其创建一个像(new MiscController())->testRenderView();
这样的新控制器,不如在这里做您的逻辑并将其替换为file_put_contents(resource_path('myfile.php'), view('myview')->render())
。
我刚刚对其进行了测试,并且可以正常工作。
您不应该像您一样尝试在调度程序中创建控制器,因为理想情况下它们需要某种请求。最好只创建带有某些功能的新类。