Comments 15
Routes лучше конфигурировать отдельно. В контроллер инжектнуть request, response и app на случай если надо сделать редирект или бросить исключение. А сами контролеры делать через callable фабрику в pimple. Получается очень даже секси
Что-то вы намудрили с моделями. Почему просто не прописать в секцию «autoload» путь к вашим моделям?
Либо сделать ещё проще:
Тогда создание модели сводится к:
И зачем передавать в модель весь контейнер
Если у вас много моделей, можно сделать фабрику:
Вызов:
Хотя я предпочитаю явно всё прописывать, это позволяет «шарить» созданные объекты:
P.S. Создавать ControllerCollection проще через фабрику, как рекомендуется в документации:
Либо сделать ещё проще:
"autoload": {
"psr-0": { "App": "src/" }
},
Тогда создание модели сводится к:
$person = new \App\Model\Person();
И зачем передавать в модель весь контейнер
$app
? Лучше явно передавать все зависимости:$person = new \App\Model\Person($app['db']);
Если у вас много моделей, можно сделать фабрику:
$app['models_factory'] = $app->protect(function ($modelName) {
$fqcn = '\\App\\Model\\'.$modelName;
return new $fqcn($app['db']);
});
Вызов:
$preson = $app['models_factory']('Person');
Хотя я предпочитаю явно всё прописывать, это позволяет «шарить» созданные объекты:
$app['repository.organization'] = $app->share(function() use ($app) {
return new \App\Repository\OrganizationRepository($app['db']);
});
$app['repository.person'] = $app->share(function() use ($app) {
return new \App\Repository\PersonRepository($app['db']);
});
...
P.S. Создавать ControllerCollection проще через фабрику, как рекомендуется в документации:
$controllers = $app['controllers_factory'];
Заставили задуматься. Ваш вариант сильно проще и естественнее. Единственное, если понадобятся какие-то настройки для моделей (помимо указания пути к ним), как по мне, провайдер будет уместнее. Спасибо за совет, люблю простоту и ваш способ мне нравится.
P.S. Да, знаю, как написано в документации, но мой PhpStorm не хотел «разворачивать» вызов фабрики и предупреждал, что переменная не инициализирована, поэтому с тех пор пишу длинное
P.S. Да, знаю, как написано в документации, но мой PhpStorm не хотел «разворачивать» вызов фабрики и предупреждал, что переменная не инициализирована, поэтому с тех пор пишу длинное
"new ControllerCollection(new Route());"
. Понимаю, что можно закрыть глаза и это совершенно не критично — лишь дело привычки.А не проще ли просто заюзать Symfony2 если Ваш проект выходит за рамки выдачи 4-5 страничек? Там уже это все уже как-то структурировано и разложено по палочкам, к тому же DI имеется?)
Тут дело вкуса: либо отпиливать ненужное, либо допиливать необходимое. Я еще молодой, не написался велосипедов, поэтому второй подход меня радует больше :)
О чем вы? Сам Silex по-сути и есть DIC
Symfony заюзать как раз совсем не проще :) Вопрос целесообразности, для многих проектов MicroMVC подходит более чем «толстый» Symfony.
по моему, использовать для таких целей Silex как-то не то…
Sign up to leave a comment.
Нативный MVC для Silex PHP Framework