#php #cakephp #before-save #cakephp-model
#php #cakephp #перед сохранением #cakephp-модель
Вопрос:
Предположим, у меня есть Model1 и Model2. Внутри каждой beforeSave() я хочу вызвать функцию f().
- Куда я должен поместить f()?
- Как я могу вызвать это внутри функции beforeSave() модели (проблема с синтаксисом)?
PS: Я хочу сделать что-то вроде изменения имени загруженного файла перед сохранением его в базе данных. Я знаю, как выполнить загрузку, но не знаю, куда поместить этот метод, чтобы я мог использовать его в других моделях.
Ответ №1:
У Behavior
есть события, к которым вы можете подключиться, одним из которых является beforeSave()
обратный вызов.
Создайте поведение и прикрепите его к моделям, которым требуется такое поведение.
Смотрите http://book.cakephp.org/2.0/en/models/behaviors.html для получения дополнительной информации.
Ответ №2:
Хороший вопрос,
Вы можете использовать AppModel.php
<?php
class AppModel extends Model{
function f1($arg){
// some code
}
}
?>
Из model1 и model2 вы можете вызвать это, как указано ниже:
<?php
class Model1 extends AppModel{
function beforeSave(){
$this->f1($arg1);
// some code
}
}
?>
Я думаю, это решит вышеуказанную проблему!
Комментарии:
1. Сработало как по волшебству! Спасибо, вам. Это уже решило мою проблему, но просто из любопытства, если я хочу использовать f1 () для многих моделей и внутри многих контроллеров (что-то полезное, например, функция strtolower), должен ли я вносить какие-либо изменения?
2. Вы можете использовать f1 () во всех моделях, поскольку класс Model расширяет модель приложения, но в случае контроллера вам придется создать ту же функцию в AppController, поскольку из контроллера вы не можете напрямую получить доступ к функции модели, вы должны создать объект этого класса….