Существуют разные общие типы рецептов, и у каждого общего типа есть свои методы.База данных запрашивает идентификатор, указанный в URL, чтобы определить тип, и используется другой класс.
Один из вариантов:
$c['recipeFactory'] = function ($c) {
return new RecipeFactory($this->get('pdo'));
};
$app->put('/recipes/{id:[0-9]+}', function (Request $request, Response $response, $args) {
//Factory will query DB and create and return object
$obj=$this->recipeFactory->create($args['id']);
$obj->update($request->getParsedBody());
});
Похоже, чаще всего статический методиспользуется для реализации фабрики, поэтому, возможно, я должен сделать следующее:
$app->put('/recipes/{id:[0-9]+}', function (Request $request, Response $response, $args) {
$obj=RecipeFactory::create($args['id'], $this->get('pdo'));
$rs=$obj->update($request->getParsedBody());
});
Но тогда я не использую контейнер, но следующее не будет работать, так как $args['id']
не определено.
$c['recipeFactory'] = function ($c) {
return new RecipeFactory($args['id'], $c->get('pdo'));
};
Должны ли статические методы использоваться для фабричного метода?
Как фабричный шаблон должен быть реализован с помощью Slim Framework?