Как получить доступ к методу модели с помощью javascript

Пожалуйста, посмотрите ниже код CakePHP

Flip2.php (модель)

<?php class Flip2 extends AppModel { var $name = 'Flip2'; public $useTable = false; //Increment the correct_answer field of the specific user public function correctAnswer($userID=89, $word) { $setQuery = "UPDATE `users_words` SET `correctanswer` = `correctanswer`+1 WHERE `userid`=$userID && `wordid`='$word' "; query($setQuery); } } 

Flip2Controller.php (контроллер)

 <?php class Flip2Controller extends AppController { public function index() { } } ?> 

index.ctp (Просмотр)

 <?php //echo $this->Html->css(array('bootstrap', 'mark', 'style')); echo $this->Html->script(array('timer','swfobject','bootstrap.min.js')); ?> <style> #hideall { display: none; opacity: 0.7; position: fixed; height: 100%; width: 100%; top: 0; left: 0; background: #000; border: 1px solid #cecece; z-index: 1; vertical-align:middle; text-align:center; } .removeCardflip{ transition: rotateY(0deg); -webkit-transition: rotateY(0deg); transition-duration: 0s; } /* SECTIONS */ .section { clear: both; padding: 0 10px 0 10px; margin: 0px; } </style> <div id="hideall"> <?php //echo $this->Html->image('progress.gif', array('alt' => 'Wait', 'style' => 'text-align:center; padding-top:200px;'));?> </div> <!--<div class="wrapper" style="border: 1px solid red; width: 100%;">--> <div class="section group" style="margin-top: 50px;"> <div class="col span_3_of_3"> <h3 style="margin:0px; font-size:22px;">Play word game: </h3> </div> </div> <div class=""> <div> <div> <span class="remainWords"><?php //echo count($words);?></span> oxxxxxxxxxxxxxxxf <?php //echo $totalWords;?> </div> <div> <?php echo $this->Html->image("comic_edit.png", array( "alt" => "Pareto List", "id" => "paretoList", 'url' => "javascript:;" ) ); ?> </div> </div> </div> <div class="container"><div class="row"> <?php foreach($worddeck as $worcard) { ?> <div class="xy col-lg-3 col-md-4 col-sm-6 img-rounded" id="card1" style="width:250px; height:200px; background-color:grey; heiht:170px; margin: 10px 10px;"> <div id="enside1" > <h1 data-pos="<?php //echo ; ?>" ><?php echo $worcard['unique_wordsforcards']['en_word']; $enSpell = $worcard['unique_wordsforcards']['en_word']; ?></h1> </div> <div id="ptside1" style="display:none;"> <?php echo $phonemer[$enSpell]; ?> <p><?php echo $worcard['unique_wordsforcards']['hint']; ?></p> </div> <div id="cntrol1"> <button type="button" id="2" class="a btn btn-success mr5 btn-lg">Acertei</button> <button type="button" id="2" class="e btn btn-danger mr5 btn-lg">Errei</button> </div> </div> <?php } ?> </div></div> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script type="text/javascript"> $(document).ready(function(){ $( ".btn-danger" ).click(function(){ console.log("Red Button"); var toclose = $(this).parent().parent(); $.ajax({ url: "../img/media.jpg", }).done(function() { console.log( "The act has been done"); toclose.toggle(); }); }); $( ".btn-success" ).click(function(){ console.log("Red Button"); var toclose = $(this).parent().parent(); $.ajax({ url: "../img/media.jpg", }).done(function() { console.log( "The act has been done"); toclose.toggle(); }); }); $( ".xy" ).click(function(){ $(this).find("#enside1").toggle(); $(this).find("#ptside1").toggle(); console.log(this); }); }); </script> 

Теперь, что мне нужно сделать, это. Когда пользователь нажимает кнопку Acertei , мне нужно выполнить функцию correctAnswer . Я очень новичок в PHP и CakePHP, поэтому я действительно запутался в том, как это сделать, когда нажимается кнопка. Любой совет, пожалуйста?

Solutions Collecting From Web of "Как получить доступ к методу модели с помощью javascript"

У тебя есть

 <div id="cntrol1"> <button type="button" id="2" class="a btn btn-success mr5 btn-lg">Acertei</button> <button type="button" id="2" class="e btn btn-danger mr5 btn-lg">Errei</button> </div> 

Вы должны использовать разные идентификаторы для каждой кнопки.

Вы можете вызвать функцию correctAnswer с помощью ajax:

Измените кнопку на что-то вроде

 <button type="button" id="2" data-word="<?php $worcard['unique_wordsforcards']['en_word'] ?>" class="a btn btn-success mr5 btn-lg">Acertei</button> 

А затем добавьте следующий код в $(document).ready()

  $(document).ready(function(){ $(".btn-success").click(function(){ var word = $(this).data('word'); $.post('/flip2/correct.json', { word: word }) .done(function(data) { alert('Saved'); }); 

Я не уверен, как работает пользовательская часть. Вероятно, вы должны иметь это в сеансе и не отправлять в функцию. Я жестко запрограммировал пользователя 89 и добавил способ отправить вам слово.

Использовать соответствующий метод модели

Функция correctAnswer в модели лучше писать с помощью updateAll :

 public function correctAnswer($userId, $word) { return $this->updateAll( array('correctanswer' => 'correctanswer + 1'), array( 'userid' => $userId, 'wordid' => $word ) ); } 

Написанные таким образом входы ( $userId и $word ) будут экранированы соответствующим образом и не подвержены SQL-инъекции.

Создание действия контроллера

Дверь в Интернет для приложения – это действие контроллера, создание простой функции, вызов метода модели и запись на выход json :

 public function correct() { $postData = $this->request->data; $word = $this->request->data['word']; $userId = $this->Auth->user('id'); $result = false; if ($userId && $word) { $result = $this->Flip2->correctAnswer($userId, $word); } $this->set('_serialize', array('result')); $this->set('result', $result); } 

Обратите внимание, что

  • Он будет работать только через почтовый запрос.
  • Компонент Auth (сеанс) используется для получения текущего идентификатора пользователя, это не пользовательский ввод.
  • Эта функция определена так, что она будет работать как ответ json.
  • Нет необходимости создавать файл с указанным выше кодом.

Обязательно настройте приложение для обработки запросов json :

После добавления Router :: parseExtensions ('json'); в файл маршрутов CakePHP автоматически переключит классы классов, когда запрос выполняется с расширением .json, или заголовок Accept является application / json.

Вызовите действие контроллера

Необходимые js будут иметь вид:

 $(".btn-success").click(function(){ var word = ...; $.post( '/flip2/correct.json', {word: word}, function (data) { console.log(data); // {result: bool} } ); }); 

Обратите внимание, что:

  • URL-адрес заканчивается на .json который является простым и надежным способом спровоцировать CakePHP для ответа как json.
  • Это почтовый запрос.
  • Ответ будет иметь форму, определенную _serialize в действии контроллера.