Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 11 ноя 2024, 00:21

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Валидация комментариев
СообщениеДобавлено: 19 сен 2012, 16:31 
Не в сети
Бывалый

Зарегистрирован: 17 сен 2012, 13:35
Сообщения: 91
еще такой вопрос.
ну вот ошибки обрабатываются.
а как сделать так что бы при удачном заполнении формы вываливавалось сообщение типо "заказчик добвален".

понятно что это можно в виде сделать но не получается. какую переменную передать в <?php if(isset(____) { ?> ?

$_POST естенственно не срабатывает. точнее срабатывает на всё, т.к. она в любом случае обрабатывается.

может можно как-то написать: если переменная $errors не обрабатывается то выводить сообщение - заказчик добавлен.

был еще вариант: <?php if($post != $errors)) { ?> но тогда вылетает ошибка parse error О.о

вот


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Валидация комментариев
СообщениеДобавлено: 19 сен 2012, 17:29 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Если добавление прошло успешно, нужно сообщение сохранить в сессию.
Код:
public function action_add()
{
    if ($this->request->method() == HTTP_Request::POST)
    {
        // тут успешно
        try
        
{
            // сохраняем сообщение
            Session::instance()->set('message', 'Все ок!');
            
            
// редирект
        }
        
        
// тут ошибки
        catch (ORM_Validation_Exception $e)
        {
            // сохраняем сообщение 
            Session::instance()->set('error', 'Ошибка!');
            $errors = $e->errors('validation');
        }
    }
    
    
// шаблон
} 

Потом редирект на страницу, эту же или другую (чаще другую другую).

В общем шаблоне где будут всегда выводиться общие собщения (обычно сверху)
Код:
<?php if (Session::instance()->get('message')): ?>
   <div class="message"><?php echo Session::instance()->get_once('message') ?></div>
<?php endif ?>
<?php if (Session::instance()->get('error')): ?>
   <div class="error"><?php echo Session::instance()->get_once('error') ?></div>
<?php endif ?>

Хотя вообще лучше это оформить в класс и всегда использовать.

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Валидация комментариев
СообщениеДобавлено: 20 сен 2012, 02:17 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Цитата:
Хотя вообще лучше это оформить в класс и всегда использовать.

Да, да, да! Как же я раньше не подумал! Можно простецкий модуль написать типа Messages :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Валидация комментариев
СообщениеДобавлено: 20 сен 2012, 11:20 
Не в сети
Бывалый

Зарегистрирован: 17 сен 2012, 13:35
Сообщения: 91
хм... AmberLEX, прописала в контрллер этот экшн, добавила редирект $this->request->redirect('customer'); и в вид

Код:
<?php if (Session::instance()->get('message')): ?>
   <div class="message"><?php echo Session::instance()->get_once('message') ?></div>
<?php endif ?>
<?php if (Session::instance()->get('error')): ?>
   <div class="error"><?php echo Session::instance()->get_once('error') ?></div>
<?php endif ?>


запись добавляется а сообщения не выводятся :/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Валидация комментариев
СообщениеДобавлено: 20 сен 2012, 12:19 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Ну смотря в каком виде этот код. Напишите под <body> для проверки.
Смысл такой: перед редиректом или ошибкой вы сохраняете в сессию
Страница обновляется и читается один раз из сессии (т.е. этот код в главном виде, который всегда грузится).

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Валидация комментариев
СообщениеДобавлено: 20 сен 2012, 12:52 
Не в сети
Бывалый

Зарегистрирован: 17 сен 2012, 13:35
Сообщения: 91
блин, не работает. Чет я не так делаю...

контроллер
Код:
<?php defined('SYSPATH') or die('No direct script access.'); //внутряняя кухня коханы отвечающая за безопасность

class Controller_Newcustomer extends Controller_Template {

   public $template = 'basecus';   //загрузка базового вида
   
   public function action_index()
   {      
      
      $customer_id = $this->request->param('id');
           
            if($_POST)
         {
            
            $_POST = Arr::map('trim', $_POST);   
            
            $post = Validation::factory($_POST);
            $post -> rule('fio', 'not_empty')
                  ->   rule('fio', 'Model_Newcustomer::unique_fio');      
            
         
         if($post -> check())
            {
          Model::factory('Newcustomer')->create_customer($customer_id, $_POST['fio'], $_POST['adres'], $_POST['tels'], $_POST['info']);
      
             $uri = Request::detect_uri('/newcustomer');
            Request::initial()->redirect($uri);   
            
            }
         else
            {
            $errors = $post -> errors('customer');
            }
//die(Debug::vars($errors));exit;
         }
   $customers = Model::factory('Newcustomer')->get_customer($customer_id);
   
   $content = View::factory('newcustomerview')
                    ->bind('customers', $customers)
               ->bind('errors', $errors);
               
    $this->template->content = $content;
   
   }
   
   public function action_add()
{
    if ($this->request->method() == HTTP_Request::POST)
    {
        // тут успешно
        try
        {
            // сохраняем сообщение
            Session::instance()->set('message', 'Все ок!');
           
            // редирект
         $this->request->redirect('customer');
        }
       
        // тут ошибки
        catch (ORM_Validation_Exception $e)
        {
            // сохраняем сообщение
            Session::instance()->set('error', 'Ошибка!');
            $errors = $e->errors('validation');
        }
    }
   
    // шаблон
   $this->template->content = $content;
}
   
}


вид
Код:
<link href="../../css/stylecus.css" rel="stylesheet" type="text/css">

   <br>
<h2>
  <p align="center">НОВЫЙ ЗАКАЗЧИК</p>
</h2>
      <div id="valid">
      <p align="center">
      
            <?php if (Session::instance()->get('message')): ?>
            <?php echo Session::instance()->get_once('message') ?>
            <?php endif ?>
            <?php if (Session::instance()->get('error')): ?>
            <?php echo Session::instance()->get_once('error') ?>
            <?php endif ?>
      
      <?php if(isset($errors['fio'])) echo $errors['fio']; ?>   
      
      </p>
      </div>
    
    <form action="" method="post">
<table class="newcus">
      <tr>
         <td align="right">
      ФИО:             <input name="fio" type="text" style="width:450px" ><br>
         </td>
      </tr>
      <tr>
         <td align="right">
        Адрес:             <input name="adres" type="text" style="width:450px" value="нет">
         </td>
      </tr>
      <tr>
         <td align="right">
      Телефон(ы):        <input name="tels" type="text" style="width:450px" value="нет">
         </td>
      </tr>
      <tr>
         <td align="right">
      Доп. информация:   <input name="info" type="text" style="width:450px" value="нет">
         </td>
      </tr>
      <tr>
         <td align="right">      
        <input name="butcus" type="submit" value="Отправить" style="width:150px" height="50px"/> <br>
         </td>
      </tr>
</table>
    </form>


</div>
</div>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Валидация комментариев
СообщениеДобавлено: 20 сен 2012, 14:16 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Да я пример привел кода просто, чтоб по аналогии вы сделали) Выкиньте весь мой public function action_add()

У вас вместо try - if($post -> check())

там пишем
Session::instance()->set('message', 'Все ок!');
$uri = Request::detect_uri('/newcustomer');

и в else
Session::instance()->set('error', 'Ошибка!');
$errors = $post -> errors('customer');

а в шаблоне, где у вас
<html>
<body>
<?php if (Session::instance()->get('message')).........

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Валидация комментариев
СообщениеДобавлено: 20 сен 2012, 14:21 
Не в сети
Бывалый

Зарегистрирован: 17 сен 2012, 13:35
Сообщения: 91
а я поняла всё буквально (
спасибо! всё работает)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group