尝试使用laravel实现评论系统

时间:2019-07-24 16:31:01

标签: javascript php mysql laravel

尝试在我的laravel项目中使用pusher实现评论系统。一切似乎都井井有条,但是每个将输入数据发送到数据库的后期请求都会返回错误500。 在firefox上使用F12监视发送到/ tip / select的内容,似乎它可以很好地传递注释文本,因此可能是控制器的问题。

路线     Route::get('/tip/select','TipController@select'); Route::post('/tip/select', 'TipController@addComment');

评论模型

namespace App;

use Illuminate\Database\Eloquent\Model;
use Zttp\Zttp;
use App\model\User;
use App\Tip;

class Comment extends Model
{
protected $guarded = [];

protected $table='comments';
//protected $fillable=['tip_id','user_id','body'];
public static function moderate($comment)
       {
           $response = Zttp::withoutVerifying()->post("https://commentator.now.sh", [
               'comment' => $comment,
               'limit' => -3,
           ])->json();
           if ($response['commentate']) {
               abort(400, "Comment not allowed");
           }
       }
public function tip(){
 return $this->belongsTo('App\Tip');
}
public function user(){
 return $this->belongsTo('App\model\User');
}
}

控制器


use Pusher\Laravel\Facades\Pusher;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Input;
use DB;
use Image;
use App\Tip;
use App\model\User;
use App\Subcategories;
use App\Category;
use App\City;
use App\Comment;
use App\CityAreas;
//use App\Http\Requests\TipFormRequest;

class TipController extends Controller
{
 public function select(){
     //$db=DB::table('tips')->orderBy('created_at','desc');
     $data=Tip::get();

     $url = Storage::disk('s3');
     //$data=Tip::paginate(10);
     //$data=$db->get();
     // dd($data);
     $comments = Comment::orderBy('id')->get();
     return view('tip', compact('data', 'url','comments'));
}

/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/

 public function create(){
   $categories=Category::all();
   $cities=City::all();
   return view('tip.create',compact('categories','cities'));
 }

 /**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/

 public function store(Request $request, City $city, Category $category){
   $this->validate($request, [
     'image' => 'image|nullable|max:1999']);
   $tipsnew = new Tip;
   $tipsnew->title = $request->title;
   $tipsnew->description = $request->description;
   $tipsnew->category_id = $request->category;
   $tipsnew->city_id = $request->city;
   $tipsnew->user_id = auth()->id();
   $tipsnew->url = $request->url;

  if ($request->hasFile('image')) {
     try{

       $file = $request->file('image');
       $name = time() . '.' . $file->getClientOriginalExtension();
       $img = \Image::make($file->getRealPath());
       $img->fit(1080);
       $img->stream();
       Storage::disk('s3')->put('tip'.'/'.$name, $img->__toString());
       $tipsnew->image = 'tip'.'/'.$name;
     }
     catch (\Exception $e)
               {
                   $response = [
                       'information' => 'Error. Something went wrong. Please try again',
                   ];
                   $statusCode = 400;
                   return response()->json($response, $statusCode);
             }
       }
   $tipsnew->save();



   return redirect ('tip/create')->with('status','your tip is created');
 }

 public function edit($id){
   $tip=Tip::whereId($id)->firstOrFail();
   $categories=Category::all();
   $selectedCategories=$tip->categories->lists('id')->toArray();
   return view('tip.edit',compact('tip','categories','selectedCategories'));
 }

 public function search(Request $request, City $city, Category $category, User $user){
     $q = $request->get('q');
     if ($q != ""){
      $tips = Tip::where('title','LIKE','%'.$q.'%')
                 ->orWhere('description','LIKE','%'.$q.'%')
                 ->orWhereHas('user', function($id) use($q){
                   return $id->where('name', 'LIKE','%'.$q.'%');
                 })
                 ->orWhereHas('city', function($id) use($q){
                   return $id->where('name', 'LIKE','%'.$q.'%');
                 })
                 ->orWhereHas('category', function($id) use($q){
                   return $id->where('name', 'LIKE','%'.$q.'%');
                 })
                 ->get();
              if(count($tips) > 0)
        return view('tip.search', ['tips' => $tips]);
     }
 }

 public function addComment(Request $request)
    {
        $data = $request;
        Comment::moderate($data['text']);
        $comment = Comment::create($data);
        Pusher::trigger('comments', 'new-comment', $comment, request()->header('X-Socket-Id'));
        //add creation of new comment to DB
        $commentnew = new Comment;
        $commentnew->user_id = Auth::user()->id();
        //$commentnew->tip_id= $request->post(['tip_id']);
        $commentnew->body = $request->text;
        $commentnew->save();
        return $comment;
    }
}

刀片片段

<h3>Comments</h3>
<form onsubmit="addComment(event);">
                      <input type="text" placeholder="Add a comment" name="text" id="text" required>
                      <input type="hidden" name="tip_id" id="tip_id" value="{{$val->tip_id}}">
                      <input type="hidden" name="username" id="username" value="{{Auth::user()->name}}">
                      <button id="addCommentBtn">Comment</button>
                  </form>
                  <div class="alert" id="alert" style="display: none;"></div>
                  <br>
                  <div id="comments">
                      @foreach($comments as $comment)
                          <div>
                              <small>{{ $comment->username }}</small>
                              <br>
                              {{ $comment->text }}
                          </div>
                      @endforeach
                  </div>
                  <!--jQuery script used to be here -->
                  <script>
                  function displayComment(data) {
                   let $comment = $('<div>').text(data['text']).prepend($('<small>').html(data['username'] + "<br>"));
                   $('#comments').prepend($comment);
                  }
                  function addComment(event) {
                   function showAlert(message) {
                       let $alert = $('#alert');
                       $alert.text(message).show();
                       setTimeout(() => $alert.hide(), 4000);
                   }
                   event.preventDefault();
                   $('#addCommentBtn').attr('disabled', 'disabled');
                   var data = {
                       text: $('#text').val(),
                       username: $('#username').val(),
                       tipid: $('#tip_id').val(),
                   };
                   fetch('/tip/select', {
                       body: JSON.stringify(data),
                       credentials: 'same-origin',
                       headers: {
                           'content-type': 'application/json',
                           'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
                           'x-socket-id': window.socketId
                       },
                       method: 'POST',
                       mode: 'cors',
                   }).then(response => {
                       $('#addCommentBtn').removeAttr('disabled');
                       displayComment(data);
                       showAlert('Comment posted!');
                   })
                  }
                  </script>

0 个答案:

没有答案