Я изо всех сил пытаюсь создать рабочую структуру 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
}
}
Первая проблема заключается в том, что объект запроса, который я установил в контейнере, не работает внутри моего контроллера.
Пример URL example.com?foo=bar
dump($this->request)
Эта строка возвращает Symfony\Component\HttpFoundation\Request
, как и должно, но кажется новым, потому что я не могу получить параметры запроса с помощью $this->request->query->all()
, он возвращает пустой.
Если я создаю Symfony\Component\HttpFoundation\Request::createFromGlobals();
как глобальную переменную, она работает, как ожидалось, а сброс $this->request->query->all()
возвращает ожидаемый array.
Итак, мой вопрос: как мне лучше всего соединить все эти компоненты вместе, чтобы иметь рабочую структуру?
Спасибо!