我正在努力为一个项目创建一个有效的 MVC 结构。
我正在使用什么:
这是我的代码。
容器.php
$containerBuilder = new \DI\ContainerBuilder();
$containerBuilder->useAutowiring(true);
$containerBuilder->useAnnotations(true);
$containerBuilder->addDefinitions(__DIR__ . '/container-config.php');
$container = $containerBuilder->build();
容器配置.php
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
use Psr\Container\ContainerInterface;
return [
'request' => function() {
return Symfony\Component\HttpFoundation\Request::createFromGlobals();
},
'session' => function() {
return new Symfony\Component\HttpFoundation \Session\Session();
}
Environment::class => function () {
$loader = new FilesystemLoader(__DIR__ . '/../templates');
$twig = new Environment($loader, [
'cache' => __DIR__ . '/../var/cache/templates',
]);
return $twig;
},
];
路由器.php
use Pecee\SimpleRouter\SimpleRouter as R;
use Pecee\Http\Middleware\BaseCsrfVerifier;
use App\App;
R::csrfVerifier(new BaseCsrfVerifier());
R::setDefaultNamespace('\App\Controller');
R::enableDependencyInjection($container);
R::get('/', 'ProductController@index', ['as' => 'products']);
R::start();
这是我的基本控制器
namespace App;
use Symfony\Component\HttpFoundation\Request;
use Twig\Environment;
class BaseController
{
protected $request;
protected $twig;
public function __construct(Request $request, Environment $twig)
{
$this->request = $request;
$this->twig = $twig;
}
}
最后,我的产品控制器
namespace App\Controller;
use App\BaseController;
class ProductController extends BaseController
{
public function index()
{
dump($this->request); // returns the request object
dump($this->request->query->all()); // return empty array
}
}
第一个问题是我在容器上设置的请求对象在我的控制器中不起作用。
示例网址example.com?foo=bar
dump($this->request)
此行返回 aSymfony\Component\HttpFoundation\Request
它应该,但它似乎是一个新的,因为我无法使用 获取查询参数$this->request->query->all()
,它返回空。
如果我创建Symfony\Component\HttpFoundation\Request::createFromGlobals();
为全局变量,它会按预期工作,并且转储$this->request->query->all()
返回预期的数组。
所以我的问题是,我如何才能最好地将所有这些组件结合在一起以形成一个工作结构?
谢谢!