Question

I have thread show page (thread/show) with reply form on the bottom of the page. Replay form posts to post/add action. When reply is successfully added i can redirect everywhere. The problem is when there are some errors for example reply form is empty and post/add is called. I need to go to thread/show instead (with 'errors' array) and show errors there, because i have reply form there.

try {$forumPost->save();
            } catch (ORM_Validation_Exception $e) {
                $errors = $e->errors('');
               //I need change url here to thread/show
            }

Is it possible?

Was it helpful?

Solution

You can store the errors in the Session array. So they'll persist across multiple requests

try {
     $forumPost->save();
} catch (ORM_Validation_Exception $e) {
     $errors = $e->errors('');

     Session::instance()->set('thread_add_errors', $errors);
     HTTP::redirect('thread/show');
}

Then in the thread show view

<?php if($errors = Session::instance()->get('thread_add_errors')): ?>
      // Show errors

      // Don't forget to delete the error :)
      <?php Session::instance()->delete('thread_add_errors'); ?>
<?php endif; ?>

OTHER TIPS

Long since I haven't used Kohana but,

 $this->template->content = View::factory('thread/show')
        ->bind('errors', $errors); 

This should be like this. You are setting variable to your view, variable can of course be an array of errors like yours.

You can also bind multiple variables to the view this way

$this->template->content = View::factory('thread/show')
    ->bind('user', $user)
    ->bind('message', $message)
    ->bind('errors', $errors); 

I hope this is what you actually wanted!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top