Передать аргумент методу

#php #laravel

Вопрос:

У меня есть функции, которые я использую в своей Article модели, они добавляют лайки в файлы cookie для определенной статьи и записывают время

 public static function hasLikedToday($articleId, string $type)
    {
        $articleLikesJson = Cookie::get('article_likes', '{}');

        $articleLikes = json_decode($articleLikesJson, true);

        // Check if there are any likes for this article
        if (! array_key_exists($articleId, $articleLikes)) {
            return false;
        }

        // Check if there are any likes with the given type
        if (! array_key_exists($type, $articleLikes[$articleId])) {
            return false;
        }

        $likeDatetime = Carbon::createFromFormat('Y-m-d H:i:s', $articleLikes[$articleId][$type]);

        return ! $likeDatetime->addDay()->lt(now());
    }

    public static function setLikeCookie($articleId, string $type)
    {
        // Initialize the cookie default
        $articleLikesJson = Cookie::get('article_likes', '[]');

        $articleLikes = json_decode($articleLikesJson, true);

        // Update the selected articles type
        $articleLikes[$articleId][$type] = today()->format('Y-m-d H:i:s');

        $articleLikesJson = json_encode($articleLikes);

        return cookie()->forever('article_likes', $articleLikesJson);
    }
 

На php.blade самой странице есть кнопки

 <a href="/article/{{ $article->id }}/like?type=heart" class="btn btn-primary">Like Heart</a>
<a href="/article/{{ $article->id }}/like?type=finger" class="btn btn-primary">Like Finger</a>
 

Вот маршруты web.php

 Route::get('/article', function () {
    $articleLikesJson = Cookie::get('article_likes', '{}');

    return view('article')->with([
        'articleLikesJson' => $articleLikesJson,
    ]);
});

Route::get('article/{id}/like', 'AppHttpControllersArticleController@postLike');
 

И сама postLike() функция в controller

 public function postLike($id) {
        $article = Article::find($id);

        $like = request('like');
      
        if ($article->hasLikedToday($article->id, $like)) {
            return response()
                ->json([
                    'message' => 'You have already liked the Article #'.$article->id.' with '.$like.'.',
                ]);
        }
    
        $cookie = $article->setLikeCookie($article->id, $like);
      
        $article->increment('like_{$like}');
    
        return response()
            ->json([
                'message' => 'Liked the Article #'.$article->id.' with '.$like.'.',
                'cookie_json' => $cookie->getValue(),
            ])
            ->withCookie($cookie);
    }
 

В общем, в чем проблема, у меня есть 2 типа лайков, которые можно увидеть в php.blade , и проблема в том, чтобы передать выбор типа лайка postLike() функции, если в моей функции вместо $like я пишу 'heart' , то все будет работать, но мне нужно определить, какой тип мывыберите (сердце или палец), скажите мне, как это можно сделать?

Ответ №1:

Вы можете использовать объект запроса Laravel.

https://laravel.com/docs/8.x/requests#input

Вот так:

 use IlluminateHttpRequest;

public function postLike($id, Request $request)
{
    $type = $request->input('type');
}
 

Комментарии:

1. отлично, спасибо)