ここで奇妙なものを手に入れました。私は Silex アプリをほぼ使い果たしましたが、 $app->finish をトリガーするのに問題があります。これが私のコードです:
<?php
require_once __DIR__ . '/../vendor/autoload.php';
$app = new Silex\Application();
$app->get('/', function (Request $request) {
$batchProcess = function () {
long_process();
};
$app->finish($batchProcess);
return $app->json("ok", 200);
};
$app->run();
ここに問題があります。バッチ プロセスがまったく実行されないのです。バグを見つけようとして、Silex\Application の "on" 関数に var_export を追加しました。
/**
* Adds an event listener that listens on the specified events.
*
* @param string $eventName The event to listen on
* @param callable $callback The listener
* @param integer $priority The higher this value, the earlier an event
* listener will be triggered in the chain (defaults to 0)
*/
public function on($eventName, $callback, $priority = 0)
{
$this['dispatcher'] = $this->share($this->extend('dispatcher', function ($dispatcher, $app) use ($callback, $priority, $eventName) {
$dispatcher->addListener($eventName, $callback, $priority);
return $dispatcher;
}));
var_export($this['dispatcher']);
}
var_export がそこにある場合、すべてが機能します (ただし、カーネルはデータを送信する前にバッチ プロセスを実行します)。var_export がコメントアウトされている場合、「ok」がすぐに返され、バッチ プロセスは実行されません。
私は何を間違っていますか?プロセスを実行せずにカーネルが終了するのはなぜですか?