Я новичок в CakePHP, и я пытаюсь понять, как сделать асинхронный вызов из представления CakePHP функции в контроллере. Я хотел бы, чтобы функция контроллера возвращала строку и отображала эту строку. Я также хотел бы сделать это, не используя помощников. Я пытаюсь найти примеры в Интернете, но не смог этого сделать. У кого-нибудь есть простой пример? Я также использую jQuery.
благодаря
CakePHP имеет встроенный помощник JS, который помогает писать функции aJax. Единственный улов состоит в том, чтобы включить jquery в вашу голову, или торт будет бросать ошибки jQuery. Heres Дополнительная информация http://book.cakephp.org/2.0/ru/core-libraries/helpers/js.html
Ваша форма:
<?php
echo $this->Form->create('User', array('default'=>false, 'id'=>'YourForm'));
echo $this->Form->input('username');
echo $this->Form->submit('Check Username');
echo $this->Form->end();
?>
Функция Ajax: ('update' => '# na') - это идентификатор элемента, который вы хотите обновить в своем представлении.
<?php
$data = $this->Js->get('#YourForm')->serializeForm(array('isForm' => true, 'inline' => true));
$this->Js->get('#YourForm')->event(
'submit',
$this->Js->request(
array('action' => 'checkUsername', 'controller' => 'user'),
array(
'update' => '#na',
'data' => $data,
'async' => true,
'dataExpression'=>true,
'method' => 'POST'
)
)
);
echo $this->Js->writeBuffer();
?>
Функция в пользовательском контроллере
function checkUsername(){
$this->autoRender = false;
$username = $this->User->find('first', array('conditions'=>array('User.username'=>$this->request->data['User']['username'])));
if ( $username == true )
echo 'Username is taken';
else
echo 'Username is not taken';
}
EDIT ** * Если вы хотите использовать jQuery для этого, а не CakePHP Helper, вы можете использовать aJax для вызова действия, а затем обновите свой элемент, как показано ниже *
$('#element').on('click', function() {
$.ajax({
url : '/controller/action',
type: 'POST',
success : function(response){
$('#elementToUpdate').html(response);
}
});
}});
В своем действии Controller вы можете вернуть строку, которую вы хотите показать в представлении
function action(){
$string = 'Show this in the view';
return $string;
}
Вышеприведенный пример будет выполнен, когда вы "щелкните" элемент с идентификатором "element", а затем "Success" измените элемент с идентификатором "elementToUpdate" на String "Показать это в представлении". Поскольку он был возвращен из действия контроллера.