Code Monkey home page Code Monkey logo

laravel-comments's Introduction

Add comments to your Laravel application

Latest Version on Packagist Total Downloads

Add the ability to associate comments to your Laravel Eloquent models. The comments can be approved and nested.

$post = Post::find(1);

$post->comment('This is a comment');

$post->commentAsUser($user, 'This is a comment from someone else');

Installation

You can install the package via composer:

composer require beyondcode/laravel-comments

The package will automatically register itself.

You can publish the migration with:

php artisan vendor:publish --provider="BeyondCode\Comments\CommentsServiceProvider" --tag="migrations"

After the migration has been published you can create the media-table by running the migrations:

php artisan migrate

You can publish the config-file with:

php artisan vendor:publish --provider="BeyondCode\Comments\CommentsServiceProvider" --tag="config"

Usage

Registering Models

To let your models be able to receive comments, add the HasComments trait to the model classes.

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use BeyondCode\Comments\Traits\HasComments;

class Post extends Model
{
    use HasComments;
    ...
}

Creating Comments

To create a comment on your commentable models, you can use the comment method. It receives the string of the comment that you want to store.

$post = Post::find(1);

$comment = $post->comment('This is a comment from a user.');

The comment method returns the newly created comment class.

Sometimes you also might want to create comments on behalf of other users. You can do this using the commentAsUser method and pass in your user model that should get associated with this comment:

$post = Post::find(1);

$comment = $post->commentAsUser($yourUser, 'This is a comment from someone else.');

Approving Comments

By default, all comments that you create are not approved - this is just a boolean flag called is_approved that you can use in your views/controllers to filter out comments that you might not yet want to display.

To approve a single comment, you may use the approve method on the Comment model like this:

$post = Post::find(1);
$comment = $post->comments->first();

$comment->approve();

Auto Approve Comments

If you want to automatically approve a comment for a specific user (and optionally model) you can let your User model implement the following interface and method:

namespace App\Models;

use BeyondCode\Comments\Contracts\Commentator;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements Commentator
{
    /**
     * Check if a comment for a specific model needs to be approved.
     * @param mixed $model
     * @return bool
     */
    public function needsCommentApproval($model): bool
    {
        return false;
    }

}

The needsCommentApproval method received the model instance that you want to add a comment to and you can either return true to mark the comment as not approved, or return false to mark the comment as approved.

Retrieving Comments

The models that use the HasComments trait have access to it's comments using the comments relation:

$post = Post::find(1);

// Retrieve all comments
$comments = $post->comments;

// Retrieve only approved comments
$approved = $post->comments()->approved()->get();

Nesting Comments

BeyondCode\Comments\Comment itself implements the HasComments trait, so you can comment on a comment and therefore nest them:

$comment = BeyondCode\Comments\Comment::first();
$comment->commentAsUser($user, "Hey there!");

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

laravel-comments's People

Contributors

edgarborras94 avatar laravel-shift avatar lukasmu avatar mechelon avatar mpociot avatar nickbyte avatar sammagee avatar sschlein avatar tkaratug avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-comments's Issues

Delete Link Is Not Being Rendered Properly

I have the Laravel-comments component implemented throughout my project using something like this:

<livewire:comments :model="$post"/>

The delete link is being rendered as : comments::comments.destroy, instead of Delete. Why?

2024-04-09_17-49-48

Extend comments model

I'd like to override your comments model with my own, so that I may add some additional data when creating comments, either through setters, etc. What is the best approach to doing this?

This package may conflict with Laravel Nova

Hi,

I believe this package conflicts with Nova (the Larave admin panel). The error happens when I try to save a comment resource in Nova.

Too few arguments to function BeyondCode\Comments\Comment::comment(), 0 passed in /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php on line 411 and exactly 1 expected

It looks like the issue is with the comment method in the HasComments trait (line 28). If I change the name of the comment method from comment to addComment, then I can correctly save the comment using Nova. Nova must be getting confused somewhere because of the the name of the trait's method (comment).

Comment replies - usage guide

Could you please kindly show us how to use the reply comments??
There seems to be no documentations for it.

Comment model has to also be extended model, so I can add things like likeable.

Post->comments->first()->reply or Post->comments->first()->comments

Thank you ;)

IDEA: report comments

Hi,

First of al thanks for the package. But iโ€™m wondering of it could be handy to build methode where Users could report offensive comments.

Count replies as comments

After I add comment on other comment of post(reply):
$post->comments()->count() is not including replies of comments like it's on facebook.

PHP 8 issue

I am getting this error doing composer update

Your requirements could not be resolved to an installable set of packages.

Problem 1
- This package requires php ^7.2 but your PHP version (8.0.3) does not satisfy that requirement.
Problem 2
- beyondcode/laravel-comments 1.2.0 requires php ^7.2.5 -> your PHP version (8.0.3) does not satisfy that requirement.
- beyondcode/laravel-comments 1.1.0 requires php ^7.2 -> your PHP version (8.0.3) does not satisfy that requirement.
- beyondcode/laravel-comments 1.1.0 requires php ^7.2 -> your PHP version (8.0.3) does not satisfy that requirement.
- Installation request for beyondcode/laravel-comments ^1.1 -> satisfiable by beyondcode/laravel-comments[1.1.0, 1.2.0].

Commentor Name

Hi, How can I add commentor name? for non logged in user?

Installation failure - PHP 8 not supported

$ composer require beyondcode/laravel-comments
[InvalidArgumentException]
Package beyondcode/laravel-comments has a PHP requirement incompatible with your PHP version, PHP extensions and Composer version

Supporting new PHP Versions

php8.1 and 8.2 are released. Right now it is not installable via composer (without extra ignoring flags) any plans to support 8.1 and 8.2?

Delete/disapprove comments?

It would be really handy if we could disapprove comments, there are times where a user needs to delete his comment

Installation failure on Laravel 7.12

Hi guys, tried to install this package several times, same result

Composer log:

Your requirements could not be resolved to an installable set of packages.

Problem 1
- Installation request for beyondcode/laravel-comments ^1.1 -> satisfiable by beyondcode/laravel-comments[1.1.0].
- Conclusion: remove laravel/framework v7.12.0
- Conclusion: don't install laravel/framework v7.12.0
- beyondcode/laravel-comments 1.1.0 requires illuminate/support ~5.6.0|~5.7.0|~5.8.0|^6.0 -> satisfiable by illuminate/support[5.6.x-dev, 5.7.17, 5.7.18, 5.7.19, 5.7.x-dev, 5.8.x-dev, 6.x-dev, v5.6.0, v5.6.1, v5.6.10, v5.6.11, v5.6.12, v5.6.13, v5.6.14, v5.6.15, v5.6.16, v5.6.17, v5.6.19, v5.6.2, v5.6.20, v5.6.21, v5.6.22, v5.6.23, v5.6.24, v5.6.25, v5.6.26, v5.6.27, v5.6.28, v5.6.29, v5.6.3, v5.6.30, v5.6.31, v5.6.32, v5.6.33, v5.6.34, v5.6.35, v5.6.36, v5.6.37, v5.6.38, v5.6.39, v5.6.4, v5.6.5, v5.6.6, v5.6.7, v5.6.8, v5.6.9, v5.7.0, v5.7.1, v5.7.10, v5.7.11, v5.7.15, v5.7.2, v5.7.20, v5.7.21, v5.7.22, v5.7.23, v5.7.26, v5.7.27, v5.7.28, v5.7.3, v5.7.4, v5.7.5, v5.7.6, v5.7.7, v5.7.8, v5.7.9, v5.8.0, v5.8.11, v5.8.12, v5.8.14, v5.8.15, v5.8.17, v5.8.18, v5.8.19, v5.8.2, v5.8.20, v5.8.22, v5.8.24, v5.8.27, v5.8.28, v5.8.29, v5.8.3, v5.8.30, v5.8.31, v5.8.32, v5.8.33, v5.8.34, v5.8.35, v5.8.36, v5.8.4, v5.8.8, v5.8.9, v6.0.0, v6.0.1, v6.0.2, v6.0.3, v6.0.4, v6.1.0, v6.10.0, v6.11.0, v6.12.0, v6.13.0, v6.13.1, v6.14.0, v6.15.0, v6.15.1, v6.16.0, v6.17.0, v6.17.1, v6.18.0, v6.18.1, v6.18.10, v6.18.11, v6.18.12, v6.18.13, v6.18.14, v6.18.15, v6.18.16, v6.18.17, v6.18.18, v6.18.19, v6.18.2, v6.18.20, v6.18.3, v6.18.4, v6.18.5, v6.18.6, v6.18.7, v6.18.8, v6.18.9, v6.2.0, v6.3.0, v6.4.1, v6.5.0, v6.5.1, v6.5.2, v6.6.0, v6.6.1, v6.6.2, v6.7.0, v6.8.0].
- don't install illuminate/support 5.6.x-dev|don't install laravel/framework v7.12.0
- don't install illuminate/support 5.7.17|don't install laravel/framework v7.12.0
- don't install illuminate/support 5.7.18|don't install laravel/framework v7.12.0
- don't install illuminate/support 5.7.19|don't install laravel/framework v7.12.0
- don't install illuminate/support 5.7.x-dev|don't install laravel/framework v7.12.0
- don't install illuminate/support 5.8.x-dev|don't install laravel/framework v7.12.0
- don't install illuminate/support 6.x-dev|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.1|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.10|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.11|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.12|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.13|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.14|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.15|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.16|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.17|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.19|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.2|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.20|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.21|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.22|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.23|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.24|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.25|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.26|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.27|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.28|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.29|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.3|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.30|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.31|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.32|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.33|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.34|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.35|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.36|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.37|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.38|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.39|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.4|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.5|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.6|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.7|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.8|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.6.9|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.1|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.10|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.11|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.15|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.2|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.20|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.21|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.22|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.23|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.26|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.27|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.28|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.3|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.4|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.5|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.6|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.7|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.8|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.7.9|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.11|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.12|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.14|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.15|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.17|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.18|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.19|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.2|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.20|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.22|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.24|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.27|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.28|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.29|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.3|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.30|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.31|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.32|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.33|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.34|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.35|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.36|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.4|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.8|don't install laravel/framework v7.12.0
- don't install illuminate/support v5.8.9|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.0.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.0.1|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.0.2|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.0.3|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.0.4|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.1.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.10.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.11.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.12.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.13.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.13.1|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.14.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.15.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.15.1|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.16.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.17.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.17.1|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.1|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.10|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.11|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.12|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.13|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.14|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.15|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.16|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.17|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.18|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.19|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.2|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.20|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.3|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.4|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.5|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.6|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.7|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.8|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.18.9|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.2.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.3.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.4.1|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.5.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.5.1|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.5.2|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.6.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.6.1|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.6.2|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.7.0|don't install laravel/framework v7.12.0
- don't install illuminate/support v6.8.0|don't install laravel/framework v7.12.0
- Installation request for laravel/framework (locked at v7.12.0, required as ^7.0) -> satisfiable by laravel/framework[v7.12.0].

Installation failed, reverting ./composer.json to its original content.
vagrant@homestead:~/code/mt$

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.