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

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

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




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

Зарегистрирован: 04 дек 2012, 07:58
Сообщения: 15
Мне нужно изменить(обновить) запись в БД. При помощи save() не получается, в место изменения записи добавляется новая. Я делаю форму редактирования. В общем суть в том что нужно в адресной строке ввести id записи и затем содержимое записи загружается в определенные поля формы, содержимое полей нужно изменить и сохранить. Все проходит нормально но только запись не обновляется а просто добавляется новая. В начале метода использую вот это:
Код:
$parameters = $this->request->param();


Потом еще код для вывода записей из таблицы в поля формы и валидация. А вот сам отрывок кода для изменения записи:

Код:
$city = ORM::factory(‘city’, $parameters['id']);
$city->name = $_POST['name'];
$city->about = $_POST['description'];
$city->save();
if($city->saved())
echo ‘город ‘.$city->name.’ сохранен’;


Не пойму в чем дело… :?:


Последний раз редактировалось Sergey 05 дек 2012, 02:33, всего редактировалось 1 раз.
Обернул исходники в [code]


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

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
Такое поведение возможно, когда запись не может быть найдена по id.
Попробуйте:
Код:
$city = ORM::factory(‘city’, $parameters['id']);
if ( ! $city->loaded()) die('Город не с id="'.$parameters['id'].'" не найден!');
$city->name = $_POST['name'];
$city->about = $_POST['description'];
$city->save();
if($city->saved())
echo ‘город ‘.$city->name.’ сохранен’;

Если увидите данное сообщение, то проверяйте значение
Код:
$parameters['id']
, возможно лучше использовать
Код:
$this->request->param('id');
или что-то не так с роутами.


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

Зарегистрирован: 04 дек 2012, 07:58
Сообщения: 15
Спасибо что откликнулись. Сейчас буду пробовать то что вы предложили.


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

Зарегистрирован: 04 дек 2012, 07:58
Сообщения: 15
Zorato, попробовал предложенные вами варианты. НЕ помогло.
После того как прописал:
Код:
if ( ! $city->loaded()) die('Город не с id="'.$parameters['id'].'" не найден!');
и попробовал изменить запись, вылезло такое сообщение:
Город с id="edit" не найден!

И почему здесь "edit"? Не понимаю.
Вариант с
Код:
$this->request->param('id');
тоже безуспешен.
Цитата:
Если увидите данное сообщение, то проверяйте значение
Код:
$parameters['id']
а как проверить это значение?
Цитата:
или что-то не так с роутами
если проблема с роутами, то как это исправить?


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

Зарегистрирован: 04 дек 2012, 07:58
Сообщения: 15
Решил выложить скрины, может это поможет быстрее разобраться.
Ввожу идентификатор записи в адресную строку, в данном случае 6. Далее открывается форма редактирования с загруженными в поля записями:
Изображение
http://yadi.sk/d/DO3TydP7132S3

После того как нажимаем кнопку сохранить, вылезает это:
Изображение
http://yadi.sk/d/Lq-_laPl132T5

Почему в адресной строке вместо id появляется "edit"? И в $parameters['id'] тоже передается "edit". Может в этом и проблема кроется?
Форумчане, пожалуйста помогите, вся надежда на вас. Уже месяц не могу продолжить из-за этого.


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

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Так может роуты покажете? Форму, куда отправляется запрос?

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


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

Зарегистрирован: 04 дек 2012, 07:58
Сообщения: 15
Сейчас сидел и читал урок "Роутинг — Часть 1". До этого я назначение роутов вообще не понимал. А теперь уже имею представление о них и понимаю зачем они нужны. По ходу чтения статьи, поймал себя на мысли, что у меня проблема все-таки с роутами, так как оказалось что у меня только один роут, тот что по умолчанию:
Код:
Route::set('default', '(<controller>(/<action>(/<id>)))')
   ->defaults(array(
      'controller' => 'welcome',
      'action'     => 'index',
   ));
Я его когда-то согласно первым урокам настроил, а потом забыл про эти роуты. Может мне нужно еще несколько роутов написать?


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

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
По умолчанию для вашей задачи пока достаточно
city - контроллер
edit - экшн
id - параметр
Куда после нажатия форма отправляет данные?
<?php echo Form::open(Request::current()) ?>

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


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

Зарегистрирован: 04 дек 2012, 07:58
Сообщения: 15
Опишу подробнее что у меня имеется. У меня 5 контроллеров:
city
street
house
client
phone
Еще есть шестой контроллер "Welcome". Он был по умолчанию я его не удалял. Я его никак не использую и по сути он мне не нужен. Ну да ладно. Соответственно у меня 5 таких же моделей и 5 представлений с формами редактирования(edit_city, edit_street, и т.д.). В каждом контроллере есть метод "edit()". Вот полностью метод из контроллера city:
Код:
public function action_edit()
   {
   //получаем параметр id из адресной строки
   $parameters = $this->request->param();
   if(isset($parameters['id']))
   {
      $view = View::factory('edit/edit_city');
      $view -> parameters = $parameters;
      $c = ORM::factory('city',$parameters['id']);
           $view->c = $c;
   if(Request::$initial->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())
                   {
               $city = ORM::factory('city', $parameters['id']);
               if ( ! $city->loaded()) die('Город с id="'.$parameters['id'].'" не найден!');
               $city->name = $_POST['name'];
               $city->about = $_POST['description'];
               $city->save();
               if($city->saved())
               echo 'город '.$city->name.' сохранен';
               }
       else {
      $errors = $post->errors('city');
      $view->errors = $errors;
      }
      
       }   
      $this->template->content = $view;
      }
      else
            {
           //если параметр id не существует то обрабатываем исключение
             throw new HTTP_Exception_404('No param');
            }       
}


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

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Вы не хотите ответить на вопрос?)

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


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

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


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

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


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

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