#php #cakephp
#php #cakephp
Вопрос:
У меня возникли некоторые проблемы при попытке «захватить» отображаемый HTML-код elmenet в cake php.
Допустим, у меня есть элемент с именем «message.ctp»
Я хотел бы сделать что-то вроде следующего:
Создание запроса $.getJSON к действию в контроллере, скажем, jsonAction(). В рамках этого действия я выполню некоторые обновления базы данных и верну строку json. Я хотел бы сохранить html-код, являющийся частью объекта json. Выполнимо?
function jsonAction() {
//Do DB update
if(db update was ok) {
$response = array("completed" => true, "html" => $this->render("message"));
} else {
$response = array("completed" => false);
}
echo json_encode($response);
}
Похоже, что прямо сейчас происходит то, что метод render отображает отображаемое значение вместо того, чтобы возвращать его.
В любом случае, я могу этого добиться?
Спасибо
С уважением, Габриэль
Комментарии:
1. Проверьте значение переменной autoRender
Ответ №1:
Забудьте об элементах на некоторое время.
Прежде всего, вы должны отделить все, что включает в себя выводимые данные из контроллера (либо это HTML, либо JSON, либо что-то еще).
Для каждого действия контроллера у вас должно быть соответствующее представление. Итак, для действия контроллера jsonAction
у вас должно быть представление names json_action.ctp
(в соответствующей папке, например, если jsonAction
находится в MessagesController
, создайте папку с именем /view/messages/json_action.ctp
).
Установите свою переменную из контроллера, отобразите ее в режиме просмотра, и все готово. Не забудьте $this->layout = 'empty'
из контроллера, чтобы отображать только то, что у вас есть в представлении.
Как правило, вам следует переделать руководства по CakePHP и перечитать книгу, чтобы лучше понять шаблон MVC (Model-View-Controller) и структуру CakePHP.
Ответ №2:
Вы имеете в виду это?
$myRenderedHtml = $this->element('message');
^^^^^^^
Комментарии:
1. Можно ли вызвать этот метод в рамках действия контроллера?
2. Нет, элементы не должны отображаться с контроллера. Можете ли вы пояснить, что вы пытаетесь сделать?
3. @deceze Я обновил вопрос, чтобы лучше объяснить, чего я хотел бы достичь.
4. @ElGabbu Почему бы вам не выполнить работу с view (создание выходных данных JSON HTML) в view? Вы не должны этого делать в контроллере, будь то AJAX-запрос или нет.
5. хммм, я мог бы … из контроллера создать массив с завершенным ключом … используйте $this->set(«ответ», $response); …. Затем в представлении проверьте, имеет ли значение $response[«завершено»] значение true, и если да, добавьте отображаемый html элемента … затем echo json_encode($response); … должно сработать, как вы думаете? Я попробую это позже. Спасибо!