У мене є компонент, який називається контролером MyproductControllerGeneralsetting
яка розширюється JControllerForm
. Всередині MyproductControllerGeneralsetting
Я перезаписую save
метод з батьківського класу для того, щоб змінити $_POST
дані, а потім метод перезапису викликає батьківський клас " save
метод зробити фактичну економію.
Ось переписаний метод у MyproductControllerGeneralsetting
:
/**
* We overwrite the saved form data and trim them to avoid spaces
*/
public function save($key = null, $urlVar = null){
if($_POST["jform"]){
foreach($_POST["jform"] as $key=>&$value){
$value = trim($value);
}
}
// Finally, save the processed form data (calls JControllerForm-save())
parent::save("id", $urlVar);
}
Річ у тім, що, хоча я "обрізав кожне поле даних POST у цьому методі перезапису, якщо у мене є такі значення, як" значення "(зверніть увагу на пробіл в кінці), вони не обрізаються.
Я перевірив save
метод JControllerForm
класу і, схоже, отримує дані з POST тут:
$data = $this->input->post->get("jform", array(), "array");
Можливо, це причина? Це отримання кешованих даних чи щось інше?
Відповіді:
4 для відповіді № 1Замість того, щоб намагатися отримати значення з $_POST
безпосередньо спробуйте отримати та встановити дані так само, як це робить батьківський клас - використовуючи внутрішній вказівник на (спільний) екземпляр класу JInput.
Ось модифікований, робочий, перезаписаний save
спосіб:
/**
* We overwrite the saved form data and trim them to avoid spaces
*/
public function save($key = null, $urlVar = null){
if($_POST["jform"]){
// Get the original POST data
$original = JRequest::getVar("jform", array(), "post", "array");
// Trim each of the fields
foreach($original as $key=>$value){
$original[$key] = trim($value);
}
// Save it back to the $_POST global variable
JRequest::setVar("jform", $postData, "post");
}
// Finally, save the processed form data
return parent::save("id", $urlVar);
}
4 для відповіді № 2
Контролер в будь-якому випадку є неправильним місцем для таких речей, або є конкретна причина, за якою ви хочете це зробити в контролері? Краще подивіться на prepareTable
функція в моделі. Там у вас вже є об’єкт таблиці із властивостями для збереження, і ви можете дезінфікувати їх перед збереженням.
Додаткова інформація: Якщо продовжити JControllerForm
, ви можете вказати
/**
* @since 1.6
*/
protected $view_item = "item";
/**
* @since 1.6
*/
protected $view_list = "items";
За замовчуванням $view_item
буде дорівнювати контексту. $view_list
намагається вгадати плюралізовану версію $view_item
. Зазвичай, додаючи s
до кінця.