CakePHP - $ this-> данные исчезают до того, как Model :: save - PullRequest
3 голосов
/ 06 сентября 2011

У меня есть страница для редактирования записей модели Venue в моем приложении. Эта страница работала на каком-то этапе, но теперь не работает.

в действии контроллера, отладка $ this-> data дает ожидаемый массив значений формы. Однако в модели Venue отладка данных $ this-> в beforeSave дает только значения полей из связанной модели (HABTM), Категория:

app/models/venue.php (line 89)
Array
(
    [Category] => Array
        (
            [Category] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 8
                )

        )

)

Что может происходить с этими данными между отправкой формы в действие контроллера и вызовом beforeSave? Где я должен искать, чтобы отладить это?

1008 * БЛАГОДАРЯ *

Изменить - вот что находится в $ this-> данных в контроллере (реальные данные изменены, чтобы удалить номера телефонов, адреса и т. Д.).

app/controllers/venues_controller.php (line 63)
Array
(
    [Venue] => Array
        (
            [id] => 19
            [city_id] => 1
            [user_id] => 130
            [name] => Acme Zoo
            [email] => events@acmezoo.org.uk
            [description] => 
Some text...

            [blurb] => Truncated description...
            [contact_id] => 
            [address_1] => Acme Zoo
            [address_2] => Some Road
            [postcode] => PP9 4DD
            [telephone] => 010101010101
            [website] => 
            [latitude] => 55.21222
            [longtitude] => -2.111111
            [featured] => 0
            [active] => 1
            [flagged] => 0
            [smg] => 0
            [smg_custom_icon] => 1
            [listings] => 1
            [send_email] => 0
            [file] => Array
                (
                    [name] => 
                    [type] => 
                    [tmp_name] => 
                    [error] => 4
                    [size] => 0
                )

        )

    [Category] => Array
        (
            [Category] => Array
                (
                    [0] => 3
                    [1] => 6
                    [2] => 10
                )

        )

)

А вот мой код для сохранения данных ...

    if (!empty($this->data)) {
        if ($this->Venue->save($this->data)) {
            $this->Session->setFlash('The venue has been saved','success');
            $countryId = $this->Venue->City->field('country_id',array('id'=>$this->data['Venue']['city_id']));
            if (!empty($this->data['Venue']['send_email'])){
                $this->_emailVenue($this->Venue->id,'venue_added',$countryId);
            }
            $this->redirect(array('action' => 'index','city'=>$this->data['Venue']['city_id']));
        } else {
            $this->Session->setFlash('The venue could not be saved. Please, try again.','failure');
        }
    }

Ответы [ 3 ]

1 голос
/ 05 июня 2012

Я думаю, что нашел решение для этого, но я действительно не уверен, следует ли считать это "хорошим" решением.Я сохраняю данные запроса перед сохранением, а затем восстанавливаю их в случае сбоя.

$temp = $this->request->data;

if ($this->Post->save($this->request->data)) {

}else{
$this->request->data = $temp;
}
0 голосов
/ 06 сентября 2011

Вы пытаетесь сохранить запись в таблице категорий одновременно? Если это так, вы можете использовать $this->Venue->saveAll($this->data) вместо save(). Если вы просто хотите сохранить данные объекта, просто передайте их в save() вместо целых $this->data следующим образом: $this->Venue->save($this->data['Venue']);

0 голосов
/ 06 сентября 2011

Возможно глупый вопрос, но передаете ли вы содержимое контроллера $ data в модель, когда вызываете метод save ()?

$this->Venue->save($this->data)
...