Kohana Redirect kohana 3.3

jkartem

Новичок
Спасибо за ответы. Вопрос все равно висит...
Вот код контроллера из которого вызывается sub контроллер:
PHP:
class Controller_Articles extends Controller_Common
{
    // Главная страница
    public function action_index()
    {
        $id = $this->request->param('id');

        if($id)
        {
            $content = View::factory('/pages/article')
                        ->set('article', $id)
                        ->bind('comments',$comments);
                $comments_url = 'comments/' . $id;

// Вот прямо здесь вызывается sub controller
            $comments = Request::factory($comments_url)->execute(); 
         
         
        }
        else
        {
            $content = View::factory('/pages/articles');
        }

     $this->template->content = $content;
    }

}
А вот код второго контроллера, внутреннего:
PHP:
class Controller_Comments extends Controller {



    public function action_index()
    {
        $id = $this->request->param('id');
     
        if(Request::initial() === Request::current())
     
                HTTP::redirect(URL::site('articles/' . $id));
     
        if($_POST)
            {
                $_POST = Arr::map('trim', $_POST);         
           
                $post = Validation::factory($_POST);
                $post -> rule('user', 'not_empty')
                     -> rule('user', 'min_length', array(':value', 2))
                     -> rule('user', 'max_length', array(':value', 20))
                     -> rule('email', 'email')
                     -> rule('message', 'not_empty')
                     -> rule('message', 'max_length', array(':value', 100));
                   
           
                if($post -> check())
                {
                     Model::factory('Comment')
                     ->create_comment($article_id, $_POST['user'], $_POST['message']);

// При таком редиректе, основной контроллер вызывается, а внутренний нет (как-будто исчез)
                    $uri = Request::detect_uri();
                     $this->redirect('/' . $uri);
                }
                else
                    $errors = $post -> errors('validation');
           }
     
        $content = View::factory('/comments/show')
            ->bind('comments', $comments)
            ->bind('errors', $errors);

        $this->response->body($content);
    }

} // Comments
Что не так?
 
Последнее редактирование:

Здыхлик

Kohaner
Команда форума
Перечитайте комментарии. Если не поможет, спросите себя, почему это должен происходить редирект? Почитайте о работе Request/Response, как в Ko3 отдаются заголовки (а ведь через них редирект происходит, правда?).
 

jkartem

Новичок
Т.е. редирект я должен делать из вызывающего контроллера?
Я так и делал тоже. Анализировал response от контроллера comments после execute, а потом в зависимости от ответа
делал редирект. Все равно, - "пропадает" в итоге внутренний контроллер...

Может объясните мне подробней, как из внутреннего запроса сделать редирект, что-бы отбработался post запрос?
Я просто только изучаю kohanu...
 

Здыхлик

Kohaner
Команда форума
Долго-долго писал коммент с кучей подколок, а потом заколебался и спрошу напрямую. Вы сами понимаете хотя бы, чего хотите добиться? Напишите сперва русским языком. А потом - что именно не получается.

Если только изучаете Kohana, то начните не с мозгокрутства HMVC'шного, а с базовых механизмов, таких как request flow, routing и тд
 

jkartem

Новичок
Я просто не могу разобраться, как , если у меня внутри одного контроллера вызывается другой - внутренний, например контроллер,
который принимает и выводит комментарии к статье, обработать данные формы, т.к. посылается post запрос, - нужен редирект
что-бы обновить страницу статьи с новым комментарием. А у меня после редиректа внутренний контроллер не вызывается.
 

Здыхлик

Kohaner
Команда форума
1. Редирект должен делать основной контроллер.
2. Использовать HMVC для создания коммента (из контроллера статьи) - ЗЛО
 

jkartem

Новичок
Почему тогда в версии kohana 3.2 все нормально работает, из вложенного контроллера?
И, кстати, при редиректе из основного контроллера - та же ерунда, вложенный контроллер пропадает...
 

Здыхлик

Kohaner
Команда форума
Дергать контроллер комментариев (или статьи, если в ней создается экшен для комментирования) напрямую. Это при сохранении комментов.

Для отображения можно пользоваться различными способами, в том числе и HMVC (основной запрос готовит тело статьи, HMVC возвращает комменты). Хотя мне в последнее время больше нравится вариант с отображением только тела статьи (контроллер не лезет никуда сам), а комменты подгружаются аяксом.
 
Сверху