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

#php #cakephp #before-save #cakephp-model

#php #cakephp #перед сохранением #cakephp-модель

Вопрос:

Предположим, у меня есть Model1 и Model2. Внутри каждой beforeSave() я хочу вызвать функцию f().

  1. Куда я должен поместить f()?
  2. Как я могу вызвать это внутри функции 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, поскольку из контроллера вы не можете напрямую получить доступ к функции модели, вы должны создать объект этого класса….