2013-05-24 3 views
2
/** 
* @Route("/installation", name="installation") 
*/ 
public function defaultAction() 
{ 
    $this->checkPhpVersion(); 
    return $this->redirect($this->generateUrl('setdatabase')); 
} 

private function checkPhpVersion() 
{ 
    if(phpversion() <= '5.5.0') 
    { 
     $message = 'aaa'; 
     return $this->render('myFooBundle:Bar:error.html.twig', ['message' => $message]);  
    } 
} 

Ну, я бы хотел, чтобы команда if в методе checkPhpVersion() отображала страницу ошибки и останавливала последующие казни.Переадресация на некоторую страницу ошибки

Инструкция вызывается, но кажется, что представление не отображается должным образом, потому что я перенаправляюсь к контроллеру setdatabase (конец defaultAction()), и я не должен.

Содержимое error.html.twig не отображается. Вместо этого, как упоминалось выше, вызывается контроллер setdatabase и открывается его метод.

Что случилось?


private function checkPhpVersion() 
{ 
    if(phpversion() <= '5.5.0') 
    { 
     echo 1; 
     exit(); 
     echo 2; 
     $message = 'aaa'; 
     return $this->render('myFooBundle:Bar:error.html.twig', ['message' => $message]);  
    } 
} 

Это до сих пор ничего не меняет. Однако, удалив инструкцию перенаправления и разместив там return array(), удалив exit(), отобразится целые числа 1 и 2, а также некоторые ошибки в соответствии с указанным return array().

+0

Вы можете видеть сообщение. Ваша версия php <= '5.5.0'. – sAnS

ответ

1

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

Одно решение было бы адаптировать checkPhpVersion() функцию следующим образом:

/** 
* @Route("/installation", name="installation") 
*/ 
public function defaultAction() 
{ 
    if (!is_null($message = $this->checkPhpVersion())) 
     return $this->render('myFooBundle:Bar:error.html.twig', ['message' => $message]); 
    else 
     return $this->redirect($this->generateUrl('setdatabase')); 
} 

private function checkPhpVersion() 
{ 
    return phpversion() <= '5.5.0' ? 'aaa' : null; 
} 

Если вы хотите оставить поколение вид внутри функции checkPhpVersion(), вы можете использовать:

/** 
* @Route("/installation", name="installation") 
*/ 
public function defaultAction() 
{ 
    if(!empty($this->checkPhpVersion())) 
     return new Response($content); 
    else 
     return $this->redirect($this->generateUrl('setdatabase')); 
} 

private function checkPhpVersion() 
{ 
    if(phpversion() <= '5.5.0') 
    { 
     $message = 'aaa'; 
     return $this->renderView('myFooBundle:Bar:error.html.twig', ['message' => $message]);  
    } 
} 

См: http://symfony.com/doc/current/book/controller.html#rendering-templates

+0

Функция будет слишком длинной, если бы у меня было больше проверок, чтобы сделать ... есть ли более чистый способ? – user2252786

+0

Смотрите мое редактирование, если оно помогает! (обратите внимание, что 'render' становится' renderView') – cheesemacfly

0

Если вы пытаетесь остановить дальнейшее выполнение, используйте функцию PHP exit() в вашем методе после отображения страницы с ошибкой.

+0

Да, я пробовал это. Добавление exit() перед и/или после оператора возврата ничего не меняет в этом случае. – user2252786

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