0

私は、ユーザーがリンクをクリックすることで投稿を高く評価できる簡単なメカニズムを構築しています。URLを介してメソッドを起動できるようにするため、POSTではなくGETを使用しています。

GETを使用してデータを保存するにはどうすればよいですか?このシナリオにはリクエストデータが存在しないため...私のモデルは次のようになります。

class Like extends AppModel
{
    public $name = 'Like';

    public $belongsTo = array('User','Post');

}

追加の方法は次のようになります。

public function add( $id )
{
    $post = $this->Post->find('first', array( 
                'conditions' => array('Post.id'=>Tiny::reverseTiny($id)) 
            ));

    if (!$post)
    {
        throw new NotFoundException('404');
    }

    if($post['Post']['user_id'] == $this->Auth->user('id'))
    {
        $this->Session->setFlash('You can\'t like your own post... That\'s just silly!');
    }

    if ($this->Like->create())
    {
            $liked = $this->Like->find('first', array( 
                'conditions' => array('Like.id'=>Tiny::reverseTiny($id), 'Like.user_id'=>$this->Auth->user('id') ) 
            ));

            if(!$liked){
                $this->Like->saveField('user_id', $this->Auth->user('id'));
                $this->Like->saveField('post_id', $post['Post']['id']);

                $this->redirect(array('controller'=>'posts','action'=>'view','id'=>Tiny::toTiny($post['Post']['id']),'slug'=>$post['Post']['slug']));
            } else {
                $this->Session->setFlash('You already like this post!');
            }
    else
    {
        $this->Session->setFlash('Server broke!');
    }   
}

誰か助けてもらえますか?

<?php echo $this->Html->link('1', array('controller'=>'followers','action'=>'add','id'=>Tiny::toTiny($post['Post']['id'])), array('title'=>'Follow','class'=>'follow')); ?>

この部分はすべて正常に機能します。それは私が苦労しているGETのDBに新しい行を保存しています。

4

2 に答える 2

1

こんにちは、コントローラーアクションへのリンクを作成し、URLで変数を渡す必要があります。

投稿の好きなリンクを明確にするには、投稿ビューにあります:$ this-> Html-> link('like this post'、array('controller' =>'like'、'action' =>'add' 、$ postId))

次のようなリンクをレンダリングする必要があります:www.yourWebSite / likes / add / 1postId1を高く評価する

アクション(追加)後の変数は、コントローラーアクションの変数として解釈されます

あなたの機能の追加があった場合

public function add($postId, $wathever){

}

URLはwww.yourWebSite/likes / add / 1 / blablaのようになります。ここで、1は追加アクションの最初の変数であり、blablaは2番目の変数です。

これは、書き換えを行わないURLと同等です:?postId = 1&whatever = blabla

編集 :

if(!$liked){
                //simulate the post behaviour
                $this->request->data['Like']['user_id'] = $this->Auth->user('id');
                $this->request->data['Like']['post_id'] = $post['Post']['id'];

                //save the data
                if ($this->Like->save($this->request->data)) {
                    $this->Session->setFlash(__('Thanks for your support !'));
                    $this->redirect(array('controller'=>'posts','action'=>'view','id'=>Tiny::toTiny($post['Post']['id']),'slug'=>$post['Post']['slug']));
                } else {
                    $this->Session->setFlash('Server broke!');
                }

}

于 2012-12-15T16:01:58.393 に答える
1

save with id=0の代わりに使うのはどうcreateですか?

<?php

    $like = array(
        "Like" => array
        (
            "id" => 0,
            "user_id" => $this->Auth->user("id"),
            "post_id" => $post['Post']['id']
        )
    );
    $result = $this->Like->save($like);
    if(!$result){$this->Session->setFlash('Server broke!');}

    $this->redirect(array('controller'=>'posts','action'=>'view','id'=>Tiny::toTiny($post['Post']['id']),'slug'=>$post['Post']['slug']));


?>
于 2012-12-15T16:13:08.030 に答える