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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: 06 дек 2012, 13:13 
Не в сети
Новичок

Зарегистрирован: 04 дек 2012, 07:58
Сообщения: 15
Я убрал все лишнее как вы и написали. Убрал второе обращение к БД и заменил
Код:
$c->name = $_POST['name'];
$c->about = $_POST['description'];
$c->save();
Код стал более читабельным но проблема осталась :(


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 дек 2012, 13:47 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
По идее кода там вообще мало должно быть
Код:
   public function action_edit()
   {
      $c = ORM::factory('city', (int) $this->request->param('id'));

      if ( ! $c->loaded())
         throw new HTTP_Exception_404();

      $view = View::factory('edit/edit_city');
      $view->c = $c;

      if ($this->request->method() == HTTP_Request::POST)
      {
         $post = Validation::factory($_POST)
            ->rule('name', 'not_empty')
            ->rule('name', 'min_length', array(':value',2))
            ->rule('name', 'max_length', array(':value',200))
            ->rule('description', 'min_length', array(':value',5))
            ->rule('description', 'max_length', array(':value',200));

         if ($post->check())
         {
            $c->name  = $post['name'];
            $c->about = $post['description'];
            $c->save();
            echo 'город '.$c->name.' сохранен';
         }
         else
            $view->errors = $post->errors('city');
      }

      $this->template->content = $view;
   }
Код:
<?php defined('SYSPATH') or die('No direct script access.') ?>

<?php echo Form::open(Request::current()) ?>

   <p><?php echo Form::input('name', $c->name) ?></p>
   <p><?php echo Form::textarea('description', $c->description) ?></p>

   <?php echo Form::submit('save', 'Save') ?>

<?php echo Form::close() ?>

По пути /city/edit/4 у вас показываются значения записи из БД c id = 4?

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 дек 2012, 23:09 
Не в сети
Бывалый

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
Лично я бы сделал самое простое - вобще удалил бы атрибут action или, если вы используете хелпер Form, то ничего не передовать методу open. По стандарту это отправит форму по текущему урлу.
Что касается добавления новых записей вместо существующих - проверяйте все ли сделали как сказал AmberLEX


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 дек 2012, 14:08 
Не в сети
Новичок

Зарегистрирован: 04 дек 2012, 07:58
Сообщения: 15
Ура! Товарищи. Ура! После стольких часов истязаний моего и ваших мозгов все заработало как надо :D . Объявляю благодарность Zorato и AmberLEX, за то, что помогали мне в решении проблемы, последние несколько дней.
Корень зла крылся в атрибуте action тега form. Я переписал код в шаблоне так, как мне предложил в последний раз AmberLEX и немного сократил количество кода в контроллере. Так вот, при использовании хелперов класса Form, запись в БД неожиданна стала обновляться. Понятно, что, дело было не в контроллере: конечно он преобразился когда я убрал говнокод. Но это сделало код более читабельным, понятным и только. Чтобы разобраться, где все-таки собака зарыта, я начал экспериментировать с вьюхой. Я сделал несколько вариантов шаблона. Но запись обновлялась, только при использовании хелпера. Воспользовавшись комбинацией клавиш ctrl+u, сравнил шаблон с хелпером и без. Они практически ничем не отличались, да и не должны. Ведь использовать старый добрый метод разметки или прибегнуть к хелперу, эт кому как привычней. А отличались они только содержимым атрибута action. Хелпер:
Код:
<form action="/city/edit/4" method="post" accept-charset="utf-8">
Обычная разметка:
Код:
<form action="edit" method="post">
Причем, если в хелпе оставить атрибут action пустым, все равно запись будет обновляться. После нескольких минут подергивания моего правого глаза, я осознал ошибку. С самого начала мне нужно было писать так:
Код:
<form name="edit_city" action="/city/edit/<?php echo Request::current()->param('id'); ?>" method="post">
или так:
Код:
<form name="edit_city" action="/city/edit/$с->id; ?>" method="post">
Я оставил первый вариант, а от хелпов избавился - к ним не привык.
Дааааа, ну и тупил же я. Если бы не ваша помощь до меня бы долго еще не дошло. Еще раз спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 дек 2012, 15:16 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Как сказал Zorato
Цитата:
вобще удалил бы атрибут action или, если вы используете хелпер Form... По стандарту это отправит форму по текущему урлу.
Т.е. Достаточно написать
Код:
<?php echo Form::open() ?>
Я просто привык, что там путь прописан.

Можно и так написать <form name="edit_city" action="" method="post">
Не думал, что action в форме вообще может вызвать затруднение)

А хелперами я наоборот пользуюсь.
1. Такой код короче <?php echo Form::open() ?>
2. Выставляется method
3. Кодировка
4. К атрибутам типа value в input применяется htmlspecialchars
Т.е. если не использовать хелпер, вам нужно вместо
Код:
<php echo Form::input('title', $c->title) ?>
будет делать так:
Код:
<input type="text" name="title" value="<?php echo htmlspecialchars($c->title, ENT_QUOTES) ?>">
Иначе если так:
Код:
<input type="text" name="title" value="<?php echo $c->title ?>">
и значение $c->title будет типа такого: My "name" O'genry, то вы увидите текст в input только до кавычки.

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


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

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


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

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


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

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