Соответствующий 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');
}
// ...
}
}
Лично мне нравится отправлять своих пользователей на панель инструментов, которая может отличаться от просмотра вашего собственного профиля.
Это просто способ сделать это.