ProjectManager.php 1012 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. namespace Lesson20;
  3. use Pimple\Psr11\Container;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpFoundation\Response;
  6. class ProjectManager implements ContainerInjectionInterface {
  7. const NAME = 'project_manager';
  8. /**
  9. * @var \Lesson20\ProjectStore
  10. */
  11. protected $store;
  12. public function __construct(ProjectStore $store) {
  13. $this->store = $store;
  14. }
  15. public static function instantiate(Container $container) {
  16. $store = $container->get(ProjectStore::NAME);
  17. return new static($store);
  18. }
  19. public function listAll() {
  20. $projects = $this->store->all();
  21. return new JsonResponse($projects);
  22. }
  23. public function createProject(string $name, string $description) {
  24. try {
  25. $this->store->create(new Project($name, $description));
  26. return new JsonResponse('Created', Response::HTTP_CREATED);
  27. }
  28. catch (\InvalidArgumentException $e) {
  29. return new Response($e->getMessage(), Response::HTTP_UNPROCESSABLE_ENTITY);
  30. }
  31. }
  32. }