# Redirect back to edit post form

**URL:** <https://discourse.slimframework.com/t/redirect-back-to-edit-post-form/5745>\
**Category:** Questions\
**Created:** [November 10, 2023, 9:00am UTC](https://discourse.slimframework.com/t/redirect-back-to-edit-post-form/5745 "2023-11-10T09:00:08Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![ghabriel](https://avatars.discourse-cdn.com/v4/letter/g/bb73d2/32.png) [@ghabriel](https://discourse.slimframework.com/u/ghabriel)\
**Post date:** [November 10, 2023, 9:00am UTC](https://discourse.slimframework.com/t/redirect-back-to-edit-post-form/5745/1 "2023-11-10T09:00:08Z")

</div>

I have a page with corresponding post data like this

```auto
/* example form */
<form action="{{ url_for('update.post') }}" method="POST">

  <input type="hidden" name="_METHOD" value="PATCH">
  <input type="hidden" name="id" value="{{ post.id }}">

  <input type="text" name="title" value="{{ post.title }}">
  <input type="text" name="content" value="{{ post.content }}">

  <button type="submit">Update</button>

</form>

```

If validation failed, I want to redirect back with additional data like errors from validation

My route:

```auto
$app->get('/post/show/{id}', [PostController::class, 'show'])->setName('show.post');

$app->patch('/post/update', [PostController::class, 'update'])->setName('update.post');

```

My controller:

```auto
<?php

namespace App\Controllers;

use App\Models\Post;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Routing\RouteContext;

class PostController
{
  public function __construct(protected ContainerInterface $container)
  {
  }

  public function show(Request $request, Response $response, int $id): Response
    {
      $post = Post::find($id);
      $view = $this->container->get('view');

      return $view->render($response, 'auth/post/show.twig', compact('post'));
    }

    public function update(Request $request, Response $response): Response
    {
      $postId = $request->getParsedBody()['id'];

      // validation failed
     // $errors = $validation->getErrors();

      $routeContext = RouteContext::fromRequest($request);
      $routeParser = $routeContext->getRouteParser();
      $url = $routeParser->urlFor('show.post', [
        'id' => $postId
      ]);

      return $response->withRedirect($url);
    }
}

```

So, how can I redirect back with additional data like errors from validation?

I’m using package slim/http

---

<div class="post-metadata">

**Author:** ![dunkoh](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.slimframework.com/dunkoh/32/995_2.png) [@dunkoh](https://discourse.slimframework.com/u/dunkoh)\
**Post date:** [November 10, 2023, 1:12pm UTC](https://discourse.slimframework.com/t/redirect-back-to-edit-post-form/5745/2 "2023-11-10T13:12:50Z")

</div>

I know it’s probably voodoo in some camps to suggest, but why not use the same route for both instead of adding extra complexity?

```auto
$app->map(['GET', 'POST'], '/post/{id}', [PostController::class, 'show'])->setName('show.post');

```

Then handle in code whether it’s POST or not? We check for errors and if errors array is empty then send them off to destination, otherwise it stays on the page (as long as your form action keeps them there)

---

<div class="post-metadata">

**Author:** ![ghabriel](https://avatars.discourse-cdn.com/v4/letter/g/bb73d2/32.png) [@ghabriel](https://discourse.slimframework.com/u/ghabriel)\
**Post date:** [November 12, 2023, 11:41am UTC](https://discourse.slimframework.com/t/redirect-back-to-edit-post-form/5745/3 "2023-11-12T11:41:47Z")

</div>

Yes, I could use map route there but I just want to separate method that only view template and method that has some logic/service
