यह संभव है:
एक ControllerResolver.php
अपनी परियोजना में कहीं बनाएं और इस के अंदर डाल दिया: अपने एप्लिकेशन में ($app->run();
से पहले)
namespace MyProject;
use Silex\ControllerResolver as BaseControllerResolver;
class ControllerResolver extends BaseControllerResolver
{
protected function instantiateController($class)
{
return new $class($this->app);
}
}
तो यह रजिस्टर आपके ऐप के लिए बेस कंट्रोलर बना सकता है, उदाहरण के लिए:
namespace MyProject;
use Silex\Application;
use Symfony\Component\HttpFoundation\Response;
abstract class BaseController
{
public $app;
public function __construct(Application $app)
{
$this->app = $app;
}
public function getParam($key)
{
$postParams = $this->app['request_stack']->getCurrentRequest()->request->all();
$getParams = $this->app['request_stack']->getCurrentRequest()->query->all();
if (isset($postParams[$key])) {
return $postParams[$key];
} elseif (isset($getParams[$key])) {
return $getParams[$key];
} else {
return null;
}
}
public function render($view, array $parameters = array())
{
$response = new Response();
return $response->setContent($this->app['twig']->render($view, $parameters));
}
}
और यह विस्तार:
class HomeController extends BaseController
{
public function indexAction()
{
// now you can use $this->app
return $this->render('home.html.twig');
}
}
मैं नियंत्रक सेवा का उपयोग करने की कोशिश की, लेकिन मैं अनुरोध इंजेक्षन नहीं कर सकते। मैंने यह कोशिश की ... $ ऐप ['post.controller'] = $ app-> शेयर (फ़ंक्शन (अनुरोध $ अनुरोध) का उपयोग करें ($ ऐप) { नया पोस्ट कंट्रोलर ($ ऐप, $ अनुरोध) लौटाएं; }); – tdbui22
'$ ऐप [" अनुरोध "]' के माध्यम से अनुरोध तक पहुंचें। – Maerlyn
बस एक छोटा सा पक्ष नोट: सिलेक्स 2.X '$ ऐप ['अनुरोध'] में' 'ऐप में बदल गया ['request_stack'] -> getCurrentRequest()' – Davincho