1

ここLaravel 5.6でこのパッケージを使用して、プロジェクトにいいねシステムを追加しています。

ドキュメントに従ってモデルを更新しました。ただし、このパッケージの使用方法については混乱しています。

ログインしたユーザーがリンクにアクセスしたときに特定の記事のいいねリストに追加する次のことを試してみました。

public function show(ArticleCategory $articlecategory, $slug)
{
    $categories = ArticleCategory::all();
    $article = Article::where('slug', $slug)->first();
    $user = User::first();
    $user->addFavorite($article);
    return view('articles.show', compact('article', 'categories'));
}

そして私のユーザーダッシュボードでは、ユーザーが好きなすべての記事を引き出すことができます

$user = Auth::user();
$favoritearticles = $user->favorite(Article::class);

しかし、記事ページにボタンがあり、ログインしたユーザーがクリックすると、いいねリストに追加される機能を探しています。私はこれを試したことがないので、この時点で立ち往生しています。

交換しました

$user->addFavorite($article);

$user->toggleFavorite($article);

しかし、それはお気に入りのリストを切り替えるだけです。つまり、一度リンクにアクセスすると、ログインしているユーザーがいいね! リストに追加されます。リンクに 2 回目にアクセスすると、ログインしているユーザーがいいね! リストから削除されます。サイクルが繰り返されます。

ボタンで同様の機能を実現する方法を誰かに説明してもらえますか?

4

2 に答える 2

2

あなたはほとんどそこにいます. を追加する必要がbuttonあり、クリックすると、サーバーへのAJAXリクエストがトリガーされ、ページを更新せずに必要なものが実行されます, ここに例があります:

まず、ボタンを追加して ID またはクラスを指定します。

<button class="like">Like</button>

次に、それをクリックした瞬間urlに、関数へのルートに置き換える必要がある を呼び出します。

次に、次のようにメソッドを宣言する必要があります。

public function like($slug)
{
    $article = Article::where('slug', $slug)->first();
    $user = \Auth::user(); //to get authenticated user...
    $user->toggleFavorite($article); // toggle so if u already like it u remove it from the liked table
    return response()->json(['status': 1])
}

もちろん、ルートをに追加しますroutes.php

Router::get('like/{slug}',"ArticleController@like");

次に、AJAX 呼び出しをフックする関数 (ここでは jQuery を使用) を追加します。

$('.like').on('click', function(){
  $.ajax({
    type: "GET",
    url: 'wwww.example.com/articles/slug',
    data: {slug: 'the slug'},
    success: function(data){
      alert('its done')
    },
  });
})
于 2018-03-05T09:49:08.657 に答える