Это бесконечные дебаты (или предпочтение ) о толстой модели / тощем контроллере и наоборот.
Что касается сохранения , модель должна определенно обрабатывать логику для этого. Хотя, скорее всего, вы бы назвали его с контроллера как $myModel->save($data);
При объединении значений я бы лично обрабатывал это в контроллере, потому что это бизнес-логика, которая не имеет прямого отношения к модели. Например, вы можете объединить строку и вместо этого отправить ее в представление.
[EDIT]
Отказ от ответственности: у меня почти нулевой опыт работы с CakePHP, но основные принципы те же.
Вы упомянули, что вы не можете заставить его работать, поэтому я замечаю одну вещь: у вас есть функция с именем Concatenate()
в вашей модели. Это стиль конструкторов PHP4, и он больше не является «наилучшей практикой» (если, конечно, вы не используете PHP4, но зачем вам это делать). На самом деле, это, скорее всего, полностью устареет в ближайшем будущем. PHP5 способ создания конструкторов с помощью функции __construct()
. Если вы решите использовать конструктор, я обязательно вызову parent::__construct();
, чтобы родительский класс AppController загружался правильно.
Что касается функциональности метода Concatenate()
, я сомневаюсь, что вы все равно намерены использовать его в качестве конструктора. Переименуйте эту функцию во что-то понятное, например saveConcat()
. Кроме того, я не уверен, что буду использовать $this->request->data
в качестве источника на случай, если вы захотите повторно использовать эту функцию и вызывать ее с любым значением. В этом случае я бы добавил параметр в функцию
class Concatenate extends AppModel {
function saveConcat($data) {
if ($this->Concatenate->save($data)) {
$this->Session->setFlash('Your post has been saved.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to add your post.');
}
}
}
Тогда где-то в вашем контроллере вам придется фактически вызывать эту функцию. Измените функцию add()
на вашем контроллере так, чтобы она выглядела примерно так:
public function add() {
if ($this->request->is('post')) {
// Put data into array for saving
$data[] = array( 'original' => $this->request->data );
$data[] = array( 'concatenated' => $original."m" );
// Call model function to save it
$this->Concatenate->saveConcat($data);
}
}
[РЕДАКТИРОВАТЬ 2]
Я просто не могу понять, почему я получаю ошибку: вызов функции-члена save () для необъекта.
Когда вы вызываете $this->Concatenate->save
из класса Concatenate, это означает, что вы пытаетесь получить доступ к переменной внутри класса с именем Concatenate и выполнить функцию. Ни один из которых не существует, конечно. Причина в том, что вам нужно назвать сам объект так:
$this->save("blah blah");
Этот метод (я полагаю, является родительским методом из класса AppModel) будет вызываться с ссылкой на текущий экземпляр объекта Concatenate
.