Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Валидация комментариев
http://forum.kohanaframework.su/viewtopic.php?f=21&t=254
Страница 2 из 3

Автор:  AmberLEX [ 18 сен 2012, 10:07 ]
Заголовок сообщения:  Re: Валидация комментариев

Или так (тут вариантов масса)
В контроллере
Код:
    public function action_add()
    {
        if ($this->request->method() == HTTP_Request::POST)
        {
            $post = Model_News::getObjValidate($_POST);
            $errors = Model::factory('news')->saveForm($post);

            if ($errors === true)
            {
                echo 'Сохранили!';
                // редирект
            }
        }

        // Шаблон
        $this->block_center = View::factory('v_add')->bind('errors', $errors);
    }
 

В модели
Код:
    public static function getObjValidate($post)
    {
        // тут пишем гору всяких условий
        return Validation::factory($post)
            ->label('title', 'Название')
            ->rule('title', 'not_empty');
    }

    public function saveForm($form)
    {
        if ($form->check())
        {
            DB::insert('news', array('title'))
                ->values(array($form['title']))
                ->execute();

            return true;
        }

        return $form->errors('news');
    }
 

Ну через ОРМ помойму понятнее и нагляднее

Автор:  prickle [ 18 сен 2012, 10:44 ]
Заголовок сообщения:  Re: Валидация комментариев

вот она моя невнимательность. вид-то я не выложила.

Код:
<form action="" method="post">
<table class="newcus">
      <tr>
         <td align="right">
        ФИО:             <input name="fio" type="text" style="width:450px"><br>
      
         <?php if(isset($errors['fio'])) echo $errors['fio']; ?>
         </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>


Автор:  prickle [ 18 сен 2012, 15:48 ]
Заголовок сообщения:  Re: Валидация комментариев

и прошу прощения, но почему не получается так, как это сделано в уроке? Объясненно все понятно, сделанно так же, а не работает.

Автор:  prickle [ 18 сен 2012, 16:16 ]
Заголовок сообщения:  Re: Валидация комментариев

array(0) вот что мне возвращает die(Debug::vars($_POST));exit;

Автор:  AmberLEX [ 18 сен 2012, 16:37 ]
Заголовок сообщения:  Re: Валидация комментариев

Если ошибка - какой шаблон выполняется?
Вы $errors передаете в шаблон, чтобы там что-то было?
Покажите последний код контроллера и модели (если там что-то есть)

Автор:  prickle [ 18 сен 2012, 16:47 ]
Заголовок сообщения:  Re: Валидация комментариев

ребята истина где-то рядом!!!
все таки что-то именно на выводе непосредственно ошибок не так.

потому что дебаг на переменную errors выдал:

array(1) (
"fio" => string(46) "Вы не ввели имя заказчика"
)



т.е. все работает, только не отображается.

Автор:  prickle [ 18 сен 2012, 16:50 ]
Заголовок сообщения:  Re: Валидация комментариев

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

    Class Model_Newcustomer extends Model {
   
    protected $_tableCustomer = 'customer';
 
    //добавление нового заказчика
 
    public function get_customer($customer_id)
    {
        $query = DB::select('fio', 'adres', 'tels', 'info')
                ->from($this->_tableCustomer)
                ->where('customer_id', '=', $customer_id)
                ->execute()
                ->as_array();
 
        if($query)
            return $query;
        else
            return array();                       
    }
 
    /**
     * Create new customer
     */
    public function create_customer($customer_id, $fio, $adres, $tels, $info)
    {
        DB::insert($this->_tableCustomer, array('customer_id', 'fio', 'adres', 'tels', 'info'))
            ->values(array($customer_id, $fio, $adres, $tels, $info))
            ->execute();                       
    }
   
   public static function unique_fio($fio)
      {
        // Проверка, существет ли уже в базе данных
      
        // указанное имnbsp;
      
        return ! DB::select(array(DB::expr('COUNT(fio)'), 'total'))
                      ->from('customer')
                      ->where('fio', '=', $fio)
                      ->execute()
                      ->get('total');
      }
   
   public function rules()
      {
    return array(
        'username' => array(
            array('not_empty'),
            array('Model_Newcustomer::unique_fio'),
                 ),           
                );
      }
   
}




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

class Controller_Newcustomer extends Controller_Template {

   public $template = 'basecus';   //загрузка базового вида
   
   public function action_index()
   {      
        /* if($this->request->is_initial())
            Request::initial()->redirect(URL::site('/newcustomer'));*/
       
      
        $customer_id = $this->request->param('id');
 
        $content = View::factory('newcustomerview')
                    ->bind('customers', $customers);
      
      
            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);
        $this->template->content = $content;
   
   }
   
}

Автор:  AmberLEX [ 18 сен 2012, 16:52 ]
Заголовок сообщения:  Re: Валидация комментариев

Так передайте шаблону
if (isset($errors)) $this->template->errors= $errors;
или вроде того

вернее опустите
$content = View::factory('newcustomerview')
->bind('customers', $customers);

после if ($_POST) {} else {}

$content = View::factory('newcustomerview')
->bind('customers', $customers)
->bind('errors', $errors);

Автор:  prickle [ 18 сен 2012, 17:57 ]
Заголовок сообщения:  Re: Валидация комментариев

ура!!!!!!!!!!!!
недели курения. а всего-то надо было.
огромное вам человеческое спасибо!

и всем кто обратил внимание на мою лобуду.

Автор:  Sergey [ 18 сен 2012, 19:21 ]
Заголовок сообщения:  Re: Валидация комментариев

Почему сразу лобуду? : ) Мы все через это проходили

Страница 2 из 3 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/