我正在用Silex創建一個應用程序,並想知道是否有可能以某種方式獲取Silex\Application
的實例,但我無法在方法參數中執行method_name(Application $application)
?獲取Silex Application的實例
例如,假設我在控制器上有一個不是動作的私有方法。如果我把Application $application
作爲參數,它會拋出一個錯誤,說我需要通過它。
如果我不需要,我寧願不必手動傳遞該方法。
我正在用Silex創建一個應用程序,並想知道是否有可能以某種方式獲取Silex\Application
的實例,但我無法在方法參數中執行method_name(Application $application)
?獲取Silex Application的實例
例如,假設我在控制器上有一個不是動作的私有方法。如果我把Application $application
作爲參數,它會拋出一個錯誤,說我需要通過它。
如果我不需要,我寧願不必手動傳遞該方法。
真的只有兩種方法可以做到這一點。
a)將Silex\Application
作爲參數傳遞給您的類的構造函數,並將其指定爲實例變量。
b)手動將Silex\Application
作爲參數傳遞給您的私有方法。
你確定你需要在你的班級完整的應用程序?依賴注入的關鍵是直接注入依賴關係,而不是注入容器(是的,Silex\Application
延伸\Pimple
,這是一個依賴注入容器。
從你對另一個答案的評論,你的目標是獲得Silex /的應用是讓在枝條服務沒有辦法,我已經解決了讓在我的Silex項目的另一功能的當前應用程序的方法是:
use \Silex\Application;
use \Symfony\Component\HttpFoundation\Request;
class myController {
private $a;
// Route defined as:
// $app->get('/foo', 'myController::showPage');
public function showPage(Application $a) {
$this->a = $a;
return $this->doAwesome();
}
private function doAwesome() {
$twig = $this->a['twig'];
return $twig->render('awesomePage.twig');
}
}
每一個功能是路由,然後將節省的端點應用程序將其作爲類屬性傳遞給其他函數,這意味着您必須記住在每個函數中都要執行$this->a = $a;
t使用doAwesome()
(之前調用doAwesome()
),但這是我提出來解決這個問題的最簡潔的方法。
嗯,不,我只想找到儲存在$ app ['twig']中的變量,我該怎麼做?我想我只是不確定Pimple如何知道一個對象應該通過DI傳遞給一個方法,或者這是一個通常應該傳遞的正常參數。 – ryanzec
您不能自動將參數傳遞給方法調用。但是你可以將你的控制器類定義爲一個服務,並將細枝注入該類的構造函數中。 – igorw
我試過這個:http://pastebin.com/LpuC0cYn:但它不起作用。 – ryanzec