Отсутствуют обязательные параметры для [Route: topic.index] [URI: topic / {id} / group] - PullRequest
2 голосов
/ 10 июля 2019

Я хочу спросить, как исправить эту ошибку, когда я удаляю тему, мне нужно перенаправить обратно на topic.index, но это ошибка

(Отсутствуют обязательные параметры для [Route: topic.index] [URI: topic / {id} / group].)

следуй покажи какой-нибудь код 01. в TopicController.

Я пытаюсь добавить $topic follow show some code 02. в TopicController, оно становится 404 not found, а идентификатор между topic/{id}/group меняется с идентификатора группы на идентификатор удаленной темы

in 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

Я надеюсь, что кто-то может мне помочь, и я надеюсь, что вы понимаете мое сообщение

Ответы [ 4 ]

0 голосов
/ 10 июля 2019

Ваш маршрут (topic.index) обрабатывается TopicController@index, для которого требуется идентификатор группы. Поэтому, когда вы уничтожаете тему, вы должны перенаправить ее обратно в индекс группы. Для этого вам нужно получить 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);
}
0 голосов
/ 10 июля 2019

Вы должны получить groupId, прежде чем удалить тему. так:

public function destroy( Topic $topic)
{
    if ($topic != null) {
       $groupId = $topic->group_id;
       $topic->delete();
       return redirect()->route('topic.index',$groupId) ;     //*******
    }
}
0 голосов
/ 10 июля 2019

После публикации topic.index Маршрут содержит один параметр * Требуется параметр id.Это ошибка в фрагменте кода 01.

в фрагменте кода 02. Вы удаляете тему, а затем перенаправляете ее на удаленную тему и пытаетесь получить ее, с которой, конечно, вернетесь 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 ]) ;     //*******
    }
}
0 голосов
/ 10 июля 2019

Вы пытаетесь перенаправить назад на тему, которую вы только что удалили, что не имеет смысла, вам также требуется группа $id, а не из темы, поэтому попробуйте вместо этого:

public function destroy( Topic $topic)
{

    if ($topic) {
       $group = $tropic->group_id;

       $topic->delete();
       return redirect()->route('topic.index', $group);
    }

    return redirect()->back();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...