-3 javascript laravel laravel-blade
缺少 [路由:conversations.show] [URI:conversations{user}] [缺少参数:user] 的必需参数。
我不知道如何解决这个问题,因为只有当我发送消息时,当我回来时我没有问题并且消息就在那里。
对话控制器.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use App\Repository\ConversationsRepository;
use Illuminate\Auth\AuthManager;
use vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder;
class ConversationsController extends Controller
{
/**
* @var ConversationRepository
*/
private $r;
/**
* @var AuthManager
*/
private $auth;
public function __construct(ConversationsRepository $conversationRepository, AuthManager $auth){
$this->r = $conversationRepository;
$this->auth = $auth;
}
public function index (){
return view('conversations/index', [
'users' => $this->r->getConversations($this->auth->user()->id)
]);
}
public function show (User $user){
return view('conversations/show', [
'users' => $this->r->getConversations($this->auth->user()->id),
'user' => $user,
'messages' => $this->r->getMessagesFor($this->auth->user()->id, $user->id)->get()->reverse()
]);
}
public function store (User $user, Request $request){
$this->r->createMessage(
$request->get('content'),
$this->auth->user()->id,
$user->id
);
return redirect(route('conversations.show', ['id'=> $user->id]));
}
}
Run Code Online (Sandbox Code Playgroud)
对话存储库.php
<?php
namespace App\Repository;
use App\Models\User;
use App\Models\Message;
use Illuminate\Database\Eloquent\Builder;
use Carbon\Carbon;
class ConversationsRepository{
/**
* @var User
*/
private $user;
/**
* @var Message
*/
private $message;
public function __construct(User $user, Message $message){
$this->user =$user;
$this->message =$message;
}
public function getConversations(int $userId){
return $this->user->newQuery()
->select('name', 'id')
->where('id', '!=', $userId)
->get();
}
public function createMessage(string $content, int $from, int $to){
return $this->message->newQuery()->create([
'content' => $content,
'seller_id' => $from,
'buyer_id' => $to,
'created_at' => Carbon::now()
]);
}
public function getMessagesFor(int $from, int $to): Builder{
return $this->message->newQuery()
->whereRaw("((buyer_id = $from AND seller_id = $to) OR (buyer_id = $to AND seller_id = $from))")
->orderBy('created_at', 'DESC');
}
}
Run Code Online (Sandbox Code Playgroud)
缺少 [路由:conversations.show] [URI:conversations{user}] [缺少参数:user] 的必需参数。
我不知道如何解决这个问题,因为只有当我发送消息时,当我回来时我没有问题并且消息就在那里。
对话控制器.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use App\Repository\ConversationsRepository;
use Illuminate\Auth\AuthManager;
use vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder;
class ConversationsController extends Controller
{
/**
* @var ConversationRepository
*/
private $r;
/**
* @var AuthManager
*/
private $auth;
public function __construct(ConversationsRepository $conversationRepository, AuthManager $auth){
$this->r = $conversationRepository;
$this->auth = $auth;
}
public function index (){
return view('conversations/index', [
'users' => $this->r->getConversations($this->auth->user()->id)
]);
}
public function show (User $user){
return view('conversations/show', [
'users' => $this->r->getConversations($this->auth->user()->id),
'user' => $user,
'messages' => $this->r->getMessagesFor($this->auth->user()->id, $user->id)->get()->reverse()
]);
}
public function store (User $user, Request $request){
$this->r->createMessage(
$request->get('content'),
$this->auth->user()->id,
$user->id
);
return redirect(route('conversations.show', ['id'=> $user->id]));
}
}
Run Code Online (Sandbox Code Playgroud)
对话存储库.php
<?php
namespace App\Repository;
use App\Models\User;
use App\Models\Message;
use Illuminate\Database\Eloquent\Builder;
use Carbon\Carbon;
class ConversationsRepository{
/**
* @var User
*/
private $user;
/**
* @var Message
*/
private $message;
public function __construct(User $user, Message $message){
$this->user =$user;
$this->message =$message;
}
public function getConversations(int $userId){
return $this->user->newQuery()
->select('name', 'id')
->where('id', '!=', $userId)
->get();
}
public function createMessage(string $content, int $from, int $to){
return $this->message->newQuery()->create([
'content' => $content,
'seller_id' => $from,
'buyer_id' => $to,
'created_at' => Carbon::now()
]);
}
public function getMessagesFor(int $from, int $to): Builder{
return $this->message->newQuery()
->whereRaw("((buyer_id = $from AND seller_id = $to) OR (buyer_id = $to AND seller_id = $from))")
->orderBy('created_at', 'DESC');
}
}
Run Code Online (Sandbox Code Playgroud)
显示.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
@foreach($users as $user)
<div class="list-group">
<a class="list-group-item" href="{{ route('conversations.show', $user->id )}}">{{$user->name}}</a>
@endforeach
<div class="col-md-9">
<div class="card">
<div class="card-header">{{ $user->name }}
<div class="card-body conversations">
@foreach($messages as $message)
<div class="row">
<div class="col-md-10 {{ $message->from->id !== $user->id ?'offset-md-2 text-right' : ''}}">
<p>
<strong>{{($message->from->id !== $user->id ? 'Moi' : $message->from->name) }}</strong><br>
{{ $message->content }}
</p>
</div>
</div>
@endforeach
<form action="" method="post">
@csrf
<div class="from-group">
<textarea name="content" placeholder="Ecrivez votre message" class="form-control"></textarea>
</div>
<button class="btn btn-primary" type="submit">Envoyer</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
Run Code Online (Sandbox Code Playgroud)
网页.php
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
})->name('welcome');
Auth::routes();
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Auth::routes();
/* Ads Routes */
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/annonces', [App\Http\Controllers\AdController::class,'index'])->name('ad.index');
Route::get('/annonce', [App\Http\Controllers\AdController::class,'create'])->name('ad.create');
Route::post('/annonce/create', [App\Http\Controllers\AdController::class,'store'])->name('ad.store');
Route::post('/search', [App\Http\Controllers\AdController::class,'search'])->name('ad.search');
/* Messages Routes */
Route::get('/message/{seller_id}/{ad_id}' ,[App\Http\Controllers\MessageController::class,'create'])->name('message.create');
Route::post('/message' ,[App\Http\Controllers\MessageController::class,'store'])->name('message.store');
/* Messagerie Routes */
Route::get('/messageries', [App\Http\Controllers\ConversationsController::class, 'index'])->name('messageries');
Route::get('/conversations', [App\Http\Controllers\ConversationsController::class, 'index'])->name('conversations');
Route::get('conversations/{user}', [App\Http\Controllers\ConversationsController::class, 'show'])->name('conversations.show');
Route::post('/conversations/{user}', [App\Http\Controllers\ConversationsController::class, 'store']);
Run Code Online (Sandbox Code Playgroud)
I try to have a page where you have yours conversations but when i sent message an error happen
您已经这样定义了您的路线。
Route::get('conversations/{user}', [App\Http\Controllers\ConversationsController::class, 'show'])->name('conversations.show');
Run Code Online (Sandbox Code Playgroud)
然后,当您使用助手访问路线网址时route()。您应该将 url 参数键入提示为user。如图所示,有很多地方你做错了。
route('conversations.show', ['user' => $user->id])
Run Code Online (Sandbox Code Playgroud)
或者,您可以避免使用关联数组,将其设置为方法调用的参数。
route('conversations.show', $user->id)
Run Code Online (Sandbox Code Playgroud)