使用 Laravel Scheduler 时视图未导出到文件

Posted

技术标签:

【中文标题】使用 Laravel Scheduler 时视图未导出到文件【英文标题】:View is not exported to file when using Laravel Scheduler 【发布时间】:2019-06-09 15:46:39 【问题描述】:

我有 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,它正在工作,并且文件 render_view.php 保存在公用文件夹中,其中包含预期的内容: p>

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

场景二:如果被调度器执行(13:00),返回错误:

local.ERROR: Illuminate\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 尝试将视图呈现为真实视图。 我也尝试创建工匠命令,但行为是相同的。当我在控制台上执行命令时工作正常,但当我从调度程序调用命令时却不行。知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

不要创建像(new MiscController())-&gt;testRenderView(); 这样的新控制器,只需在此处执行您的逻辑并将其替换为file_put_contents(resource_path('myfile.php'), view('myview')-&gt;render())

我刚刚测试过,它可以工作。

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

【讨论】:

我没用过这个功能。但我试图让它像ob_start(); view('view_to_render', ['variable' =&gt; '123456']); $result = ob_get_clean(); file_put_contents(public_path('rendered_view.php'), $result); ob_end_clean(); 一样,但它不起作用 我已经改变了答案。忘记ob_clean 的东西,因为你给定的代码几乎已经自己工作了

以上是关于使用 Laravel Scheduler 时视图未导出到文件的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 未找到基表或视图错误

Laravel 中的返回视图未显示正确的 URL

尝试在 Laravel 7 中查看不同内容时,刀片视图上的 ErrorException 未定义变量

未定义的变量:Laravel中的错误

未找到 Laravel 注册索引并创建错误

laravel刀片视图中的变量未定义错误