2014-09-27 2 views
0

У меня вопрос с наилучшей практикой.PRG BestPractice Zf2

Его ясно, что Post/Redirect/Get делает, но какая будет лучшая практика для их обработки?

Я думаю, что есть два способа их обработки.

1.) Мы сначала вызываем плагин prg на действие контроллера 2.) Мы сначала проверяем данные сообщения и только перенаправляем на prg-response, если успешно?

Моя проблема об этом, по крайней

1.) Мы увеличиваем время отклика из-за перенаправления, это по умолчанию, так что я думаю, не самое лучшее решение

2.) будет создавать накладные расходы каждый раз валидацию формы

Что вы имели в виду, это лучшее решение в этом случае?

рассматривает

UPDATE:

Что я имею в виду, нормальный (стандартный) случай что-то вроде этого - http://framework.zend.com/manual/2.0/en/modules/zend.mvc.plugins.html#the-post-redirect-get-plugin.

$prg = $this->prg('url'); 
if ($prg instanceof Response) { 
    return $prg; 
} elseif ($prg === false) { 
    return new ViewModel(array(...)); 
} 

$form->setData($prg); 

Это означает, что theres после каждой формы отправляет перенаправление. Теперь моя идея была что-то вроде этого:

$prg = $this->prg(); 
$form = $this->getFormLogin(); 

$data = ($prg instanceof ResponseInterface) 
      ? $this->getRequest()->getPost() 
      : $prg; 

if (false !== $data) { 
    $form->setData($data); 
    if (true === $form->isValid()) { 
     if ($prg instanceOf ResponseInterface) { 
      return $prg; 
     } 

    // Make something within the loginservice or something else 
} 

Идеи это, только перенаправить на PRG только если форма является действительной, чтобы сэкономить время отклика и другие вещи (из-за настройки начальной загрузки и т.д.)

ответ

0

Zend Framework разработан на основе шаблона Front-Controller, поэтому необходимо перенаправить страницу при доступе к различным ресурсам (действие контроллера).

Кроме того, когда вы запускаете функцию перенаправления (URL) из исходного кода, требуется минимальное время, когда вы сравнили время доступа к тому же (URL) из своего браузера.

Вы можете уменьшить время отклика до значительной суммы при использовании classmap_autoloading.

Обновлено:

для примера я взять процесс входа в систему, в коде ниже я реализовать как HTTP и опубликовать методы в том же действии(), но вы можете реорганизовать эту функцию, основанную на методах HTTP.

LoginController.php

public function loginAction() 
{ 
    //code 
    if ($request->isPost()) { 
    //code 
    if ($isValid) { 
     return $this->redirect()->toUrl('urUrl'); 
    } 
    return $this->redirect()->toUrl('urUrl'); 
    } 
    //code 
    return $viewModel; 
} 

После рефакторинга кода выше

//it used for HTTP get 
    public function loginAction() 
    {  
     //code 
     return $viewModel; 
    } 

    //it used for HTTP POST 
    public function loginPostAction() 
    {  
     //code 
     if ($notValid) { 
      return $this->redirect()->toUrl('urUrl'); 
     } 
     $viewModel->setTemplate($viewpath); 
     return $viewModel; 
    } 

Вы должны изменить конфигурацию маршрутизации таким образом, чтобы обрабатывать как для HTTP GET и почтовых методов.если запрос HTTP-получить процесс Контроллер loginAction(), но если его HTTP-пост он обрабатывает loginPostAction()

Zend framework 2 - HTTP method Routing

Обновлено: Цель плагин, чтобы избежать пользователю Отправьте данные снова в браузер. В вашем случае вы пытаетесь включить опцию POST их данных, когда форма недействительна (you are trying to change the behaviour of PRG plugin). если вы действительно беспокоитесь о времени отклика, не используйте плагин PRG. создайте свою собственную логику внутри своего действия-контроллера.

--SJ

+0

привет, THX для вашего ответа. В этом случае я не понимаю, что «сравнил время доступа к одному и тому же ресурсу», в моем случае URL-адрес перенаправления совпадает с URL-адресом вызывающего абонента. То, что я имею в виду с точкой 2.), я исключаю перенаправление так долго, что данные действительны, вызовы ressource одинаковы для обоих методов, только перенаправление будет excludet, считает – user3549136

+0

@ user3549136, я обновил свой ответ. Я не понимаю, что вы на самом деле спросили меня. можете ли вы уточнить свой вопрос, используя выше loginAction()? –

+0

Я обновил свой вопрос на вершине, надеюсь, это прояснит мой вопрос? Вопрос в этом случае, имеет смысл обрабатывать PRG только в действительной форме? привет – user3549136

Смежные вопросы