2012-01-29 1 views
1

Есть ли простой способ проверить модель, какое действие было использовано в контроллере для доступа к функции beforeSave()?cakephp: проверка действия контроллера в модели (beforeSave)

Я хочу иметь другое поведение, если beforeSave() был вызван edit vs. Если он был вызван добавлением.

Как работа вокруг, я использовал скрытое поле в своей форме, но я думаю, что это не самый эффективный способ.

спасибо.

ответ

0

Я не знаю, правильно ли я понимаю.

function beforeSave() { 
    if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) { 
    // insert 
    } else { 
    // edit 
    } 
    return true; 
} 
+0

Эй, сначала спасибо за ваш ответ. Чтобы сделать его более понятным: допустим, я использую сохранение в действии «Изменить» и в действии «добавить». Я хотел бы знать, как я могу проверить модель (например, внутри до сохранения), какое действие было использовано. В контроллере я получаю этот результат, используя $ this-> action. Мне нужно это в модели. – user1171243

+0

Я понимаю, что вы просите, но не понимаете, почему, если мы хотим уважать MVC. Я не знаю, как сделать то, что вам нужно в CakePHP. –

+0

Одним из возможных решений является создание двух функций для создания и модификации модели. Вместо save() на контроллере, сделайте это в модели –

1

Вы всегда можете использовать ваш $this->params['controller'] и $this->params['action']

0

Я нашел это на StackOverflow, когда прибегая к помощи:

маршрутизатора :: getParams()

Вывод этого в модели будет до:

array(5) { 
    ["plugin"]=> 
    NULL 
    ["controller"]=> 
    string(12) "cashflowrows" 
    ["action"]=> 
    string(5) "chart" 
    ["named"]=> 
    array(0) { 
    } 
    ["pass"]=> 
    array(0) { 
    } 
} 
+0

Спасибо! Ответ Кевина не работает в 1.3, но это делает. – Gus