2013-04-10 3 views
2

У меня есть функция action_register, которая пытается зарегистрировать нового пользователя. В случае успеха я хотел бы, чтобы пользователь был переадресован в форму для входа (которая отображается через action_login). Тем не менее, я также хотел бы отправить $message и $message_type в окно входа в систему, в котором говорится что-то вроде «Ваша учетная запись была создана, пожалуйста, войдите».Перенаправление на другой контроллер с данными

Каков наилучший способ для этого. К лучшему я имею в виду поддерживаемый, чистый и безопасный.

Мои идеи до сих пор:

  • POST данные в URL, направляемые на action_login и перенаправления.
  • Найдите способ передачи данных прямо к методу контроллера и выполните команду action_login как всегда.

ответ

5

Вы на самом деле не нужно делать какой-либо фрагмент коды для установки сеанса сообщения, Fuel PHP обеспечивает очень хороший интерфейс для обработки такой функции. Его основным классом занятий здесь является то, как нам нужно использовать в соответствии с документацией.

в вашем случае позволяет сказать, что вам нужно перенаправить login_action от register_action и после успешного завершения процесса регистрации, а затем просто установить флэш-сообщение, как показано ниже

Session::set_flash('success', 'Your account has been successfully created !'); 

Позже в окне просмотра файла логина, вы можете просто использовать приведенный ниже код, чтобы получить флэш-сообщение, которое вы хотите.некоторые, что, как это

<?php if (Session::get_flash('success')): ?> 
    <div class="alert-box info"> 
     <?php echo Session::get_flash('success') ; ?> 

    </div> 
<?php endif; ?> 

Также Вы можете удалить сообщение сессии сказать «успех» в приведенном выше примере, используя только delete_flash метод, как показано ниже

Session::delete_flash('success'); 

Чтобы узнать больше о классе сеанса вы можете узнать ссылка ниже

FuelPhp Session Class docuementation

, а также перенаправлять пользователя, вам не нужно писать какой-либо новый PHP-код, Fuel PHP дает хороший интерфейс для этого тоже, его класс «Response», который имеет методы, определенные для Вас, чтобы сделать это

Вот как вам нужно перенаправить пользователя в любой из вашего контроллера действия

Response::redirect('yourRouteName'); 

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

Будучи объектом, ориентированным на ваш подход к программированию, особенно при использовании хорошего качества OOP MVC, например fuelPhp, позволяет вам постоянно изобретать колесо (DRY), предоставляя вам доступ к готовому Getters and setters.

Надеюсь, что это поможет

+1

Хотя код @Telvin Nguyen может работать так, как предполагалось, используя классы, которые предлагает инфраструктура, это правильный способ сделать что-то. Я голосую за это! –

+0

Да, это то, что я делал, когда я спрашивал об установке переменных вспышки. Работает чудесно. – n0pe

1

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

Вы должны сделать фрагмент кода, чтобы сделать эту вещь и для resusability - После того, как вы делаете что-то, как результат, вам нужно сохранить сообщение в переменной сеанса, а затем перенаправить на другие действия Ex:

$_SESSION['msg'] = 'Your account has been created, please log in'; 
  • На целевом экране вы проверяете, была ли установлена ​​эта переменная сеанса, затем вы печатаете сообщение, которое было сохранено в сеансе var, и очистите его.

     <?php 
         if(isset($_SESSION['msg']){ 
         ?> 
         <script> 
         //call some javascript function to display popup for example 
         var msg = '<?php echo $_SESSION['msg']; ?>'; 
         display_popup_message(msg); 
    
         function display_popup_message(msg){ 
          alert(msg); 
         } 
         </script> 
         <?php 
         unset($_SESSION['msg']); 
         } 
         ?> 
    
+0

А как правые сеансовые переменные, что имеет смысл. Должен ли я установить переменную сеанса синхронизации? – n0pe

+0

Да, вы должны это сделать. –

+0

FuelPHP не использует родные сессии PHP, поэтому по умолчанию это не будет передано следующему запросу. Правильный способ сделать это - aravind.udayashankara's anwser. – WanWizard

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