Соответствующий URL на титульном листе

Привет так как ты делаешь это в kohana 3.3 и kostache?

форма

<form method="POST" action="user/login">

<input type="text" name="email" />
<input type="passowrd" name="password" />

</form>

контроллер

 public function action_login()
 {
   $user = Auth::instance()->login($this->request->post('email'),$this->request->post('password'));

   if($user)
   {
       $view = Kostache_Layout::factory()
       $layout = new View_Pages_User_Info();

       $this->response->body($this->view->render($layout));
   }
   else
   {
       $this->show_error_page();
   }

 }

Класс просмотра

class View_Pages_User_Info
{
    public $title= "Profile";
}

Усы Шаблон

   <p> This is the Profile Page</p>

Пока все хорошо, я сейчас на странице профиля, но URL

localhost/kohana_app/user/login 

вместо

localhost/kohana_app/user/profile

Я знаю, что могу изменить action_login в action_profile соответствовать URL-адресу и заголовку страницы, но есть ли другой способ сделать это?

1 ответ

Решение

Забудьте о теле для ответа, если вход был успешным, и перенаправьте на страницу профиля.

HTTP::redirect(Route::get('route that routes to the profile page')->uri(/* Just guessing */'action' => 'profile'));

Читайте на Post / Redirect / Get.


Пример маршрута (-ов) по запросу

Route::set('home', '')
    ->defaults(array(
        'controller' => 'Home',
    ));

Route::set('auth', 'user/<action>', array('action' => 'login|logout'))
    ->defaults(array(
        'controller' => 'User',
    ));

Route::set('user/profile/edit', 'user/profile/edit(/<user>)')
    ->defaults(array(
        'controller' => 'User_Profile', // Controller_User_Profile
        'action' => 'edit',
    ));

Route::set('user/profile/view', 'user/profile(/<action>(/<user>))', array('action' => 'edit'))
    ->defaults(array(
        'controller' => 'User_Profile',
    ));

############

class Controller_User_Profile {

    public function action_index()
    {
        // ...

        $this->action_view($user->username());
    }

    public function action_view($user = NULL)
    {
        if ($user === NULL)
        {
            $user = $this->request->param('user');
        }

        // ...
    }
}

Лично мне нравится отправлять своих пользователей на панель инструментов, которая может отличаться от просмотра вашего собственного профиля.

Это просто способ сделать это.

Другие вопросы по тегам