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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Валидация комментариев
СообщениеДобавлено: 22 июл 2012, 21:23 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
В уроке "Валидация комментариев" мы на практике реализуем проверку пользовательских комментариев на соответствие правилам валидации.
Урок находится по ссылке:
http://kohanaframework.su/advanced/comments_validation

_________________
kohanaframework.su - обучение фреймворку Kohana


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

Зарегистрирован: 17 сен 2012, 13:35
Сообщения: 91
Здравствуйте. Уже беспокоила с вопросом по валидации. Так и не разобралась.
Задача: ввести в таблицу бд данные заказчика. 5полей (customer_id, fio, adres, tels, info). Ввод информации происходит, но ПРОБЛЕМА с валидацией:
После обработки формы с пустым значением fio данные в форму не попадаю, но и ошибка не выводится.
Листинг модель, конструктор, вид, файл с ошибками ->
ps. в программировании не сильна. самоучка чайник. проект оч нужен. и не судите строго пожалуйста

модель
Код:
<?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();                       
    }
 
   //создание нового заказчика
    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();                       
    }
}   
   
}


Контроллер:
Код:
<?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');      
       
   
    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');
      }

   }
        $customers = Model::factory('Newcustomer')->get_customer($customer_id);
        $this->template->content = $content;
   
}
}


Файл с ошибками (\application\messages\):
Код:
<?php
 
return array(
   'fio' => array(
      'not_empty' => 'Вы не ввели имя заказчика',
),   );


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

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
А где проверка (Validation Rules)?


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

Зарегистрирован: 17 сен 2012, 13:35
Сообщения: 91
в контроллере. вроде все есть. ну во всяком случае за основу взят полностью урок http://kohanaframework.su/advanced/comments_validation


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

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


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

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
prickle писал(а):
в контроллере. вроде все есть. ну во всяком случае за основу взят полностью урок http://kohanaframework.su/advanced/comments_validation



Код:
 $post = Validation::factory($_POST);


Ну и где правила?
У вас rules не описаны ни в модели ни в контролёре. На что должна "ругаться" валидация?


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

Зарегистрирован: 17 сен 2012, 13:35
Сообщения: 91
к стати обращала внимание что многие прописывают в модели такое. как раз сейчас этим занимаюсь. но толку 0.
Код:
 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 function rules()   //все равно не работает
      {
    return array(
        'fio' => 'not_empty'
           
        );
      }
   //не обращайте внгимания эт я с уникальносью параллельно пытаюсь что-то изобразить
   public static function unique_fio($fio)
      {
        // Проверка, существет ли уже в базе данных
      
        // указанное им
      
        return ! DB::select(array(DB::expr('COUNT(fio)'), 'total'))
      
                      ->from('customer')
      
                      ->where('fio', '=', $fio)
      
                      ->execute()
      
                      ->get('total');
      }
}   
   
}


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

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Попробуйте в контролёре так:

Код:
$post = Validation::factory($_POST)
          ->rule('fio','not_empty');


И потом, в форме представления действительно есть поле fio?

Посмотреть что вам приходит постом можно например так:

Код:
die(Debug::vars($_POST));exit;


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

Зарегистрирован: 29 авг 2012, 16:09
Сообщения: 46
Sergey писал(а):

Посмотреть что вам приходит постом можно например так:

Код:
die(Debug::vars($_POST));exit;


А зачем после die() exit() ?
Ведь они оба прекращают дальнейшее выполнение программы. Разница только в том, что die() выводит текст, а exit() нет.

Или я что то путаю?


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

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
А почему вы делаете не через ORM?
Если через ORM, то в модели можно написать правила типа таких
Код:

public function rules
()
{
    return array(
        'title' => array(
            array('not_empty'),
        ),
    );
}

public function labels()
{
    return array(
        'title' => 'Название',
    );
}

public function filters()
{
    return array(
        TRUE => array(
            array('trim'),
        ),
        'title' => array(
            array('strip_tags'),
        ),
    );
}
 

Если так как вы делаете, то примерно так
Код:
    public function action_add()
    {
        if ($this->request->method() == HTTP_Request::POST)
        {
            $post = Validation::factory($_POST)
                ->label('title', 'Название')
                ->rule('title', 'not_empty');

            if ($post->check())
            {
                DB::insert('news', array('title'))
                    ->values(array($post['title']))
                    ->execute();
            }
            else
                $errors 
= $post->errors('news');
        }

        // Шаблон
        $this->block_center = View::factory('v_add')->bind('errors', $errors);
    }
 
И не if ($_POST) как у вас, а т.к. я написал, потомо, что в этом примере вы в него не попадете, если не заполните title
view/v_add.php
Код:
echo Form::open(Request::current());

echo Form::input('title');
echo Debug::vars($errors);
echo Form::submit('add', 'save');

echo Form::close();

В общем этот пример рабочий, подстраивайте под себя

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


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

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


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

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


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

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