【问题标题】:Missing required parameters for [Route: topic.index] [URI: topic/{id}/group][Route: topic.index] [URI: topic/{id}/group] 缺少必需的参数
【发布时间】:2019-11-19 20:18:46
【问题描述】:

我想问当我删除一个需要重定向回topic.index但它是错误的主题时如何解决这个错误

(缺少 [Route: topic.index] [URI: topic/{id}/group] 的必需参数。)

follow show some code 01. in TopicController.

我尝试在TopicController 中添加$topic follow show some code 02.,它变为404 not foundtopic/{id}/group 之间的id 从Group 的id 变为已删除的Topic 的id

web.php

Route::get('/topic/{id}/group', 'TopicController@index')->name('topic.index');

01.在主题控制器中

class TopicController extends Controller
{    
    public function index($id)
    {
        $group = Group::findOrFail($id);
        $topics = Topic::where('group_id', $id)->orderBy('created_at', 'desc')->paginate(5);
        return view('topic.index', compact('group', 'topics'));
    }

    public function destroy( Topic $topic)
    {
        if ($topic != null) {
           $topic->delete();
           return redirect()->route('topic.index') ;     //*******
        }
    }
}

02.在主题控制器中

class TopicController extends Controller
{  
    public function index($id)
    {
        $group = Group::findOrFail($id);
        $topics = Topic::where('group_id', $id)->orderBy('created_at', 'desc')->paginate(5);
        return view('topic.index', compact('group', 'topics'));
    }

    public function destroy( Topic $topic)
    {
        if ($topic != null) {
           $topic->delete();
           return redirect()->route('topic.index',$topic) ;     //*******
        }
    }
}

删除主题后我需要重定向回topic.index

我希望有人可以帮助我,我希望你能理解我的信息

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您的路线 (topic.index) 由 TopicController@index 处理,这需要组的 ID。因此,当您销毁主题时,您必须将其重定向回组索引。因此删除模型前需要先获取group id

    您尝试从最近删除的对象/模型重定向到路由,这是不可能的。

    您的代码将如下所示:

    public function destroy( Topic $topic)
    {
        if ($topic) {
           $group_id = $tropic->group_id;
    
           $topic->delete();
    
           return redirect()->route('topic.index', $group_id);
        }
    
        return redirect()->back();
    }
    

    如果你使用 Laravel 路由显式绑定 (https://laravel.com/docs/5.8/routing#explicit-binding) 你不必检查主题是否存在,这是由 Laravel 完成的。那么你的代码会看起来像这样,更简洁,对吧?:

    public function destroy(Topic $topic)
    {
        $group_id = $tropic->group_id;
    
        $topic->delete();
    
        return redirect()->route('topic.index', $group_id);
    }
    

    【讨论】:

      【解决方案2】:

      您正在尝试重定向回您刚刚删除的主题,这没有意义,您还需要该组的$id,而不是来自该主题,因此请尝试以下操作:

      public function destroy( Topic $topic)
      {
      
          if ($topic) {
             $group = $tropic->group_id;
      
             $topic->delete();
             return redirect()->route('topic.index', $group);
          }
      
          return redirect()->back();
      }
      

      【讨论】:

        【解决方案3】:

        您必须先获得groupId,然后才能删除主题。 所以:

        public function destroy( Topic $topic)
        {
            if ($topic != null) {
               $groupId = $topic->group_id;
               $topic->delete();
               return redirect()->route('topic.index',$groupId) ;     //*******
            }
        }
        

        【讨论】:

          【解决方案4】:

          正如您发布的topic.index 路由包含一个参数id 参数是必需的。那是 01 Snippet 中的错误。

          在 02 sn-p 您正在删除主题,然后重定向到已删除的主题并尝试获取它,当然会返回 404 not found 代码

          解决办法:

          public function destroy( Topic $topic)
          {
              if ($topic != null) {
                 $group_id = $topic->group_id;
          
                 $topic->delete();
                 return redirect()->route('topic.index',['id' => $group_id ]) ;     //*******
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2022-01-16
            • 2019-10-01
            • 2020-03-13
            • 1970-01-01
            • 1970-01-01
            • 2020-06-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多