1

いくつかのデータを入力して「rendered_view.php」としてエクスポートする必要がある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');

コンソール/Kernel.php

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

シナリオ 1: 127.0.0.1:8000/testRenderViewに移動すると、機能しており、ファイル render_view.php が期待されるコンテンツと共に public フォルダーに保存されます。

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

シナリオ 2:スケジューラによって (13:00 に) 実行されると、エラーが返されます。

local.ERROR: Illuminate\View\Engines\PhpEngine::main(): 必要な 'includes/php_file.php' を開くのに失敗しました (include_path='.:') {"exception":"[object] (Symfony\Component\Debug \Exception\FatalErrorException(コード: 64): Illuminate\View\Engines\PhpEngine::main(): 必要な 'includes/php_file.php' (include_path='.:') を開くことができませんでした

スケジューラから実行されると、Laravel はビューを実際のビューとしてレンダリングしようとするようです。artisan コマンドも作成してみましたが、動作は同じです。コンソールでコマンドを実行すると正常に動作しますが、スケジューラからコマンドを呼び出すと動作しません。なぜそれが起こっているのですか?

4

1 に答える 1

0

のような新しいコントローラーを作成する代わりに、(new MiscController())->testRenderView();ここでロジックを実行して に置き換えますfile_put_contents(resource_path('myfile.php'), view('myview')->render())

私はちょうどそれをテストし、それは動作します.

理想的にはある種のリクエストが必要なため、スケジューラーでコントローラーを作成しようとするべきではありません。いくつかの機能を備えた新しいクラスを作成するだけでよいでしょう。

于 2019-01-15T16:02:30.647 に答える