【问题标题】:Illuminate\Contracts\Container\BindingResolutionExceptionIlluminate\Contracts\Container\BindingResolutionException
【发布时间】:2021-06-24 06:40:08
【问题描述】:

您好,我正在使用 laravel 和 livewire,我正在尝试为聊天室解决此错误,有人可以帮我吗? :

Illuminate\Contracts\Container\BindingResolutionException 无法 解决类中的依赖项 [Parameter #0 [ $message ]] 应用\Http\Livewire\ChatRoom

这是LettresController.php

中的相关函数
    public function ChoisirLettresAléatoiresDuReserve(){
        // Messages de la btcom
        $message=Message::all();
        $user_id = auth()->id();
        // check if there is game in the request
        if (!request()->has('game')) {
            return redirect()->route('game.select');
        }
        // getting game ID and fetching game
        $game = $this->get_game_by_id((int)request()->get('game'));
    
        // check if the game has finished or is still running
        if ($this->check_game_finished($game)) {
    
            $this->update_game_timer($game, $user_id);
    
    
    // user has used up his chevalet, so we need to update with new
            $position = $this->user_chevalet_position($game, $user_id);
            if ($position === null) {
                // user might have entered a game id but was never part of the game
                return redirect()->route('game.select');
            }
    
            // get if the player has no more playing piece left
            $user_chevalet = $this->get_user_chevalet($game, $user_id, $position);
    
            $valeur = $this->generate_valeur($user_chevalet);
            $game = $this->get_game_by_id((int)request()->get('game'));
    
    
            return view('jeu')->with(compact('game', 'valeur', 'position','message'));
    
        }
        return redirect()->route('game.ended')->with(['Resultat' => 'Game Ended']);
    
    }

我正在使用 livewire livewire.ChatRoom.php

    <?php
    
    namespace App\Http\Livewire;
    use App\Traits\GameTraits;
    use Livewire\Component;
    use Carbon;
    
    class ChatRoom extends Component
    {
    
        public $newMessage;
        public $photo;
        public $messages;
    
        public function mount($message){
            // dd($message);
            $this->messages = $message;
        }
    
        public function addMessage($message)
        {
            if($this->newMessage==''){
                return;
            }
            array_unshift($this->messages,[
                'contenu' => $this->newMessage,
                'created_at' => \Carbon\Carbon::now()->diffForHumans(),
                'user_id'=> 'Ness'
            ]);
        }
    
        public function render()
        {
            return view('livewire.chat-room');
        }
    }

chat-room.blade.php

    <div class="container" id="positionbt"> 
        <div class="row">
            <div class="col-md-8 col-md-offset-2 bootstrap snippets bootdeys" >
                <div class="widget-container scrollable list rollodex">
                    <div class="heading" id="btc">
                        <span class="fa"></span> Boite de communication
    
                    </div>
                    <div class="panel-body">
                        <ul class="chat">
                        <li class="left clearfix"><span class="chat-img pull-left" >
                                <img  width="40" height="40" src="{{ asset('img/scrabblelogo.png') }}" alt="User Avatar" class="img-circle" />
                            </span>
                                <div class="chat-body clearfix" class="text">
                                    <div class="header">
                                        <strong class="primary-font">!Aide</strong> 
                                    </div>
                                    <div class="text">
                                        <p>
                                            Bonjour! Afin de pouvoir effectuer les tâches ci-dessous, vous pouvez utiliser ces 5 commandes:<br>
                                            <b>1. Placer un mot:</b> !placer ligne colonne (h|v) mot<br>
                                            <b>2. Changer une lettre:</b> !changer lettre<br>
                                            <b>3. Passer le tour à un autre joueur:</b> !passer<br>
                                            <b>4. Afficher le menu d'aide:</b> !aide<br>
                                            <b>5. Quitter menu d'aide:</b> !quitter<br>
                                        </p>
                                    </div>
                                </div>
                            </li>
                            @foreach ($messages as $message)
    
                            <li class="left clearfix"><span class="chat-img pull-left">
                                <img  width="40" height="40" src="{{  $message->post_by->photo }}" alt="User Avatar" class="img-circle" />
                            </span>
                                <div class="chat-body clearfix">
                                    <div class="header">
                                        <strong class="primary-font">{{ $message->post_by->nick }}</strong> <small class="pull-right text-muted">
                                            <span class="glyphicon glyphicon-time"></span>{{ $message->created_at }}</small>
                                    </div>
                                    <p>
                                        {{ $message->contenu }}
                                    </p>
                                </div>
                            </li>
                            @endforeach
                    </div>
                    <form class="panel-footer" id="msg" wire:submit.prevent="addMessage">
                        <div class="input-group">
                            <input id="btn-input" type="text" class="form-control input-sm" placeholder="Tapez votre message ici..." wire:model="newMessage"/>
                            <span class="input-group-btn" style="padding-top: 8px;">
                                <button class="btn btn-primary btn-sm" id="btn-chat" type="submit">
                                    Envoyer</button>
                            </span>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>

我将它包含在 jeu.blade.php

<div class="btcom">
    <livewire:chat-room :message="$message"/>
</div>

我在 web.php 中的根目录如下:

    Route::get('/jeu', [App\Http\Controllers\LettresController::class, 'ChoisirLettresAléatoiresDuReserve'])->name('jeu');

【问题讨论】:

  • Route::get('/jeu/{message}', [App\Http\Controllers\LettresController::class, 'ChoisirLettresAléatoiresDuReserve'])->name('jeu'); ???
  • 是的,它甚至在添加实时聊天之前和在函数 ChoisirLettresAléatoiresDuReserve() 中压缩“消息”之前就可以工作,但问题不在于路由,而在于绑定,我正在寻找如何做绑定,因为我仍然没有找到任何可行的解决方案

标签: php laravel laravel-8 laravel-livewire


【解决方案1】:

好的,试着理解你追求的目标你可以这样处理,之后我们可以通过更好的方式来做

return redirect()->route('jeu.message',['game'=> $game, 'valeur'=>$valeur, 'position' => $position,'message' => $message]);

在 web.php 中

Route::get('/jeu/{message}', function($message){
  // dd($message);
  return view('jeu',['message'=>$message]);
})->name('jeu.message'); 

这样,您可以在加载此路由时检查方法内部是否传递消息值并将其注入刀片中,这样可以由嵌套组件绑定

【讨论】:

  • 这实际上引发了另一个错误 Illuminate\Routing\Exceptions\UrlGenerationException Missing required parameters for [Route: jeu.message] [URI: jeu/{message}] [Missing parameters: "id":*, "user_id":*,"game_id":*,"position":*,"contenu":"","deleted_at":null,"created_at":"","updated_at":" *",....
  • return redirect()->route('jeu.message',['message' => $message]);仅传递消息参数即可查看。检查路由里面的dd看里面是否绑定了数据
  • 回到第一个错误,这里的问题是我正在处理两个表游戏和消息
  • 然后具体说明您要绑定到聊天组件的消息表或模型: public MessageClass $message;这样就不需要 mount 方法了
  • 我没有真正理解你的想法
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 2021-09-02
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2021-07-13
  • 2021-09-04
  • 2021-05-12
相关资源
最近更新 更多