私の新しいサイトを構築するために、私はSilexフレームワークを試すことにしました。私は文書で多くを読んだので、今まで問題はなかった。SilexでAjaxクエリを使用するには?
私は投票システムを作っています。私はそれをAjaxで動的に使用したいと思います。
$app['dao.ajax'] = $app->share(function ($app) {
return new mysite\DAO\AjaxDAO($app['db']);
});
その後
app.php:私はサービスを登録し
$app->match('/ajax/vote', mysite\Controller\HomeController::voteAction');
のroutes.php:
だから、最初に私がルートを宣言しました、関連するコントローラがされています。私は、投票ボタンをクリックしたときに
HomeController.php
public function voteAction(Application $app, Request $request) {
$vote = new Vote();
$vote->setVoteId($request->get('vote_id'));
$vote->setBookId($request->get('book_id'));
$vote->setVoterIp($request->get('IP'));
$voteAction = $app['dao.ajax']->saveVote($vote);
return $app['twig']->render('index.html.twig');
}
だから、(再)インデックス・ページをレンダリングすることになっています。その後
DAO.php
namespace mysite\DAO;
use Doctrine\DBAL\Connection;
abstract class DAO
{
private $db;
public function __construct(Connection $db) {
$this->db = $db;
}
protected function getDb() {
return $this->db;
}
protected abstract function buildDomainObject($row);
}
、投票機能:
マイDAOクラス
AjaxDAO.php
namespace mysite\DAO;
use mysite\Domain\Vote;
class AjaxDAO extends DAO
{
protected function buildDomainObject($row) {
$vote = new Vote();
$vote->setVoteId($row['vote_id']);
$vote->setBookId($row['book_id']);
$vote->setVoterIp($row['vt_ip']);
return $vote;
}
public function saveVote(Vote $vote) {
$voteData = array(
'vote_id' => $vote->getVoteId(),
'book_id' => $vote->getBookId(),
'vt_ip' => $vote->getVoterIp()
);
$this->getDb()->insert('t_vote', $voteData);
}
}
投票クラス:
Vote.php今
namespace mysite\Domain;
class Vote
{
private $id;
private $vote_id;
private $book_id;
private $vt_ip;
public function getId() {
return $this->id;
}
public function setId($id) {
$this->id = $id;
}
public function getVoteId() {
return $this->vote_id;
}
public function setVoteId($vote_id) {
$this->vote_id = $vote_id;
}
public function getBookId() {
return $this->book_id;
}
public function setBookId($book_id) {
$this->book_id = $book_id;
}
public function getVoterIp() {
return $this->vt_ip;
}
public function setVoterIp($vt_ip) {
$this->vt_ip = $vt_ip;
}
}
、その中にAjaxでのjQuery:
vote.js
$('button').on('click', function like(e) {
$(this).off('click');
e.preventDefault();
var vote_id = '{{ vote_id }}';
var book_id = $(this).attr('data-book');
var IP = '{{ getUserIp() }}';
if ($(this).hasClass('active')) {
$.ajax({
type: 'POST',
url: '/ajax/vote',
data: {'POST_type': 'vote', 'book_id': book_id, 'IP': IP},
success: function(html) {
$('button').removeClass('active').addClass('disabled');
},
error: function() {
alert('error');
}
});
};
});
とき、私あなたは、理解しているかもしれませんがVOTEボタンをクリックすると、エラーアラートが表示されます。私はリンク個人用サイト/ AJAX /投票を訪れたとき、私はこのエラーがあります:
Notice: Undefined property: mysite\DAO\AjaxDAO::$request
私は公式ドキュメントでは、前のStackOverflowの質問でチェックが、私は唯一のquestion 22011254を発見し、それが私を助けにはなりませんでした。 ..
EDIT:私は、SilexがAjaxとのJsonデータ交換のみをサポートしていることを読んだだけです。たぶんこれは問題ですか?
ありがとうございます。私のエラーは次のとおりです: 'Notice:未定義のプロパティ:mysite \ Controller \ HomeController :: $ request' – cyclone200
' $ this-> request'ではなく '$ request'です。私の答え –
あなたの答えで私のコードを編集しましたが、「INSERT INTO t_vote(musite \ Domain \ Voteid、mysite \ Domain \ Votevote_id、mysite \ Domain \ Votebook_id、mysite \ Domain \ 'null、null、null、null]:' ... AjaxDAOで '(配列)'を使用しましたが、$データを挿入したいときに配列を期待していてオブジェクトだった。 – cyclone200