Я пытаюсь заставить работать любимую систему laravel (https://github.com/ChristianKuri/laravel-фаворит). Я установил его, как сказано в файле readme.
Когда я нажимаю кнопку «Мне нравится», она возвращает успех, но функция, похоже, не выполняется.
Я пробовал ajax быть таким:
$('.btn-heart').on('click', function(){
$.ajax({
type: "GET",
url: 'http://localhost/view/<?php echo $post->post_id; ?>',
data: {post_id: '<?php echo $post->post_id; ?>'},
success: function(data){
alert('working')
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus); alert("Error: " + errorThrown);
}
});
})
или вот так
$('.btn-heart').on('click', function(){
$.ajax({
type: "GET",
url: 'http://localhost/view/',
data: {post_id: '<?php echo $post->post_id; ?>'},
success: function(data){
alert('working')
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus); alert("Error: " + errorThrown);
}
});
})
Я должен четко понимать, что post_id — это мой уникальный post_id из моей таблицы сообщений.
Мой вид.blade.php:
<div class = "card-body no-padding">
<div class = "card-image-wrapper">
<div class = "img-card-img">
<img src = "{{ $post->post_url }}" class = "card-image"/>
</div>
<div class = "overlay-img"></div>
</div>
<div class = "card-padding-user">
<div class = "float-left">
<button class = "btn btn-default btn-heart"><i class = "far fa-heart icon-middle icon-thre"></i><i class = "fa fa-heart icon-middle icon-non"></i> <span class = "align-middle ml-2">0 Likes</span></button>
</div>
<div class = "clearfix"></div>
</div>
</div>
Мой web.php:
Route::get('/view/{post_id}',"PostController@like");
Мой постконтроллер:
public function like($post_id)
{
$post = Post::where('post_id', $post_id)->first();
$user = Auth::user();
$user->toggleFavorite($post);
return response()->json(['status' => 1]);
}
Моя модель пользователя:
use Notifiable;
use Favoriteability;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'avatar', 'full_name'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function posts() {
return $this->hasMany(Post::class, 'creator','name');
}
Моя модель поста:
use Favoriteable;
protected $fillable = [
'creator', 'post_url', 'game', 'likes', 'created_at'
];
public function user() {
return $this->belongsTo(User::class);
}
Почему-то функция вообще не работает, в избранное ничего не вставляется.
Так что мне удалось заставить его работать.
Вместо использования метода GET вам нужно использовать метод POST и включить токен CSRF.
$('.button-like').on('click', function(){
$.ajax({
type: "post",
url: '/view/<?php echo $post->post_id; ?>',
data: {postid: '<?php echo $post->post_id; ?>', _token: '{{ csrf_token() }}'}
});
})