default crud new function

This commit is contained in:
2019-12-05 22:54:52 +01:00
parent f85462ac40
commit b402eabeb9
6 changed files with 83 additions and 14 deletions

View File

@@ -132,6 +132,11 @@ class CRUDController extends AbstractController
return $this->formEditAction('edit', $request, $id);
}
public function new(Request $request): Response
{
return $this->formCreateAction('new', $request);
}
public function view(Request $request, $id): Response
{
return $this->viewAction('view', $request, $id);
@@ -218,7 +223,7 @@ class CRUDController extends AbstractController
protected function formCreateAction($action, Request $request, $formClass = null): Response
{
$entity = $this->createEntity($request);
$entity = $this->createEntity($action, $request);
$this->checkACL($action, $entity);
@@ -240,13 +245,13 @@ class CRUDController extends AbstractController
$this->getPaginatorFactory();
$this->addFlash('succes', $this->generateFormSuccessMessage($action, $entity));
$result = $this->onBeforRedirect($action, $entity, $form, $request);
$result = $this->onBeforeRedirect($action, $entity, $form, $request);
if ($result instanceof Response) {
return $result;
}
return $this->redirectToRoute('chill_crud_'.$this->get, ['id' => $entity->getId()]);
return $this->redirectToRoute('chill_crud_'.$this->getCrudName().'_view', ['id' => $entity->getId()]);
} elseif ($form->isSubmitted()) {
$this->addFlash('error', $this->generateFormErrorMessage($action, $form));
@@ -254,11 +259,12 @@ class CRUDController extends AbstractController
$defaultTemplateParameters = [
'form' => $form->createView(),
'entity' => $entity
'entity' => $entity,
'crud_name' => $this->getCrudName()
];
return $this->render(
$this->getTemplateFor($action),
$this->getTemplateFor($action, $entity, $request),
$this->generateTemplateParameter($action, $entity, $request, $defaultTemplateParameters)
);
}
@@ -289,13 +295,17 @@ class CRUDController extends AbstractController
return $this->crudConfig['name'];
}
protected function checkACL($entity, $action)
protected function checkACL($action, $entity)
{
$this->denyAccessUnlessGranted($this->getRoleFor($action), $entity);
}
protected function getRoleFor($action)
{
if (NULL !== ($this->getActionConfig($action)['role'])) {
return $this->getActionConfig($action)['role'];
}
return $this->buildDefaultRole($action);
}
@@ -373,16 +383,17 @@ class CRUDController extends AbstractController
return $defaultTemplateParameters;
}
protected function createEntity(Request $request): object
protected function createEntity($action, Request $request): object
{
$type = $this->getEntityClass();
return new $type;
return new $type;
}
protected function getTemplateFor($action, $entity, Request $request)
{
if (!empty($this->crudConfig[$action]['template'])) {
return $this->crudConfig[$action]['template'];
if ($this->hasCustomTemplate($action, $entity, $request)) {
return $this->getActionConfig($action)['template'];
}
switch ($action) {
@@ -399,6 +410,11 @@ class CRUDController extends AbstractController
}
}
protected function hasCustomTemplate($action, $entity, Request $request): bool
{
return !empty($this->getActionConfig($action)['template']);
}
protected function onPreFlush(string $action, $entity, FormInterface $form, Request $request)
{
}
@@ -432,6 +448,11 @@ class CRUDController extends AbstractController
protected function onBeforeRedirect(string $action, $entity, FormInterface $form, Request $request)
{
}
protected function getActionConfig(string $action)
{
return $this->crudConfig['actions'][$action];
}
protected function getPaginatorFactory(): PaginatorFactory
{

View File

@@ -67,10 +67,13 @@ class CRUDRoutesLoader
$defaults = [
'_controller' => $action['controller'] ?? $config['controller'].'::'.$name
];
if ($action === 'index') {
if ($name === 'index') {
$path = "{_locale}".$config['base_path'];
$route = new Route($path, $defaults);
} elseif ($name === 'new') {
$path = "{_locale}".$config['base_path'].'/'.$name;
$route = new Route($path, $defaults);
} else {
$path = "{_locale}".$config['base_path'].($action['path'] ?? '/{id}/'.$name);
$requirements = $action['requirements'] ?? [