2014-01-23 17 views
3

我試圖運行使用以下命令RuntimeException的執行命令行子請求時

$subRequest = Request::create('/api/movie/show?id=61333'); 
$res = $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false); 

當我運行一個控制器內的這兩條線,但是當我嘗試運行它完美罰款Silex的子請求在命令行中,初始化路線和應用程序後,我得到了以下PHP的錯誤:

PHP Fatal error: Uncaught exception 'RuntimeException' with message 
'Accessed request service outside of request scope. Try moving that call to a before handler or controller.' 
in /my/project/vendor/silex/silex/src/Silex/Application.php:132 

我懷疑有什麼錯誤/未初始化命令行背景,但我想不出是什麼是。任何想法 ?

的信息,我的命令行腳本看起來像

<?php 
require_once __DIR__.'/../vendor/autoload.php'; 
$app = new Silex\Application(); 
// service providers init ... 
$app->register(new Provider\UrlGeneratorServiceProvider()); 
$app->register(new Provider\ServiceControllerServiceProvider()); 
// ... more service providers init 
// routes definition 
require_once __DIR__.'/../src/routes.php'; 
// run sub query 
$subRequest = Request::create('/api/movie/show?id=61333'); 
$res = $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false); 

在此先感謝 (再次,最後兩行很好地工作在控制器內)

[編輯]:通過解析@smwhr:我需要用替換HttpKernelInterface :: SUB_REQUEST HttpKernelInterface :: MASTER_REQUEST

回答

2

您正在嘗試在沒有任何請求的情況下處理SUB請求。

試試這個:

$res = $app->handle($subRequest, HttpKernelInterface::MASTER_REQUEST, false); 

如果您使用的腳本和控制器相同的代碼,只是測試$應用[「要求」]的存在,知道哪些可供選擇

+1

它的工作原理!非常感謝 – benoit