Laravel视图链接和web.php路由搞砸了

时间:2017-06-17 16:53:48

标签: php laravel laravel-5 laravel-5.2

我正在创建一个主题和主题的论坛。如果用户点击主题,他/她将看到该主题中的所有主题。在这里我们遇到第一个问题。在theme.blade.php我有一个标题:<span class="card-title">{{ $theme->theme_title }} - Topics</span>。该标题应该显示用户点击的主题的标题。但它显示(只是一个疯狂的猜测)数据库中的一些随机主题标题甚至没有连接到这个主题。

现在我为用户制作了一个额外的视图。如果用户单击所选主题中的主题。他/她应该重定向到他/她点击的主题,而是显示(再次)来自数据库的一些未连接到主题/主题的随机主题。而不是用户点击的主题。在此GIF http://imgur.com/a/vOQFT中,您可以看到问题如果您查看个人资料图片和用户名。也许问题出在Web.php或其他地方,我不知道。对不起,但我无法弄清楚如何以更好的方式说出来。我想我在代码中改变了一些东西。

以下是可能出现此问题的每个代码文件

Web.php

Route::get('/', 'ThemesController@index')->name('home');
Route::get('/theme/{theme_id}/topics', 'ThemesController@show')->name('showtheme');


Route::get('/theme/{theme_id}/topics/{topic_id}', 'TopicsController@show')->name('showtopic');



Route::group(['middleware' => 'App\Http\Middleware\AdminMiddleware'], function() {

//THEMES

Route::get('/theme/{theme_id}/edit', 'ThemesController@edit')->name('edittheme');
Route::patch('/theme/{theme_id}/edit', 'ThemesController@update')->name('updatetheme');

Route::get('/theme/create', 'ThemesController@create')->name('createtheme');
Route::post('/theme/create', 'ThemesController@save')->name('savetheme');

Route::delete('/theme/{theme_id}/delete', 'ThemesController@destroy')->name('deletetheme');

//TOPICS

Route::get('/theme/{theme_id}/topics/{topic_id}/edit', 'TopicsController@edit')->name('edittopic');
Route::patch('/theme/{theme_id}/topics/{topic_id}/edit', 'TopicsController@update')->name('updatetopic');

Route::get('/theme/{theme_id}/topics/create', 'TopicsController@create')->name('createtopic');
Route::post('/theme/{theme_id}/topics/create', 'TopicsController@save')->name('savetopic');

Route::delete('/theme/{theme_id}/topics/{topic_id}/delete', 'TopicsController@destroy')->name('deletetopic');



});

Route::get('user/profile', 'UserController@profile')->name('showprofile');
Route::post('user/profile', 'UserController@update_avatar');

Theme.blade.php(主题中每个主题的列表)

<div class="col s12">
            <div class="card">
                <div class="card-content"><span class="card-title">{{ $theme->theme_title }} - Topics</span>
                    <div class="collection">
                        @foreach($topics as $topic)
                            <a href="{{ route('showtopic', ['theme_id' => $theme->id, 'topic_id' => $topic->id ]) }}" class="collection-item avatar collection-link"><img src="/uploads/avatars/{{ $topic->user->avatar }}" alt="" class="circle">
                                <div class="row">
                                    <div class="col s6">
                                        <div class="row last-row">
                                            <div class="col s12"><span class="card-title">{{ $topic->topic_title }}</span>
                                                <p>{!! str_limit($topic->topic_text, $limit = 125, $end = '...') !!}</p>
                                            </div>
                                        </div>
                                        <div class="row last-row">
                                            <div class="col s12 post-timestamp">Posted by: {{ $topic->user->username }} op: {{  $topic->created_at }}</div>
                                        </div>
                                    </div>
                                    <div class="col s2">
                                        <h6 class="title center-align">Replies</h6>
                                        <p class="center replies">{{ $topic->replies->count() }}</p>
                                    </div>
                                    <div class="col s2">
                                        <h6 class="title center-align">Status</h6>
                                        <div class="status-wrapper center-align"><span class="status-badge status-open">open</span></div>
                                    </div>
                                    <div class="col s2">
                                        <h6 class="title center-align">Last reply</h6>
                                        <p class="center-align"></p>
                                        <p class="center-align">Tijd</p>
                                    </div>
                                </div>
                            </a>
                        @endforeach
                    </div>
                </div>
            </div>
        </div>

ThemesController.php(仅显示方法)

public function show($id)
{
    $theme = Topic::find($id)->theme;
    $topics = Theme::find($id)->topics;

    return view('themes.theme')->with('topics', $topics)->with('theme', $theme);
}

TopicsController.php(仅显示方法)

public function show($id)
{
    $theme = Theme::find($id);
    $topic = Topic::find($id);

    return view('topics.topic')->with('theme', $theme)->with('topic', $topic);

}

感谢您查看我的代码。这个问题已经存在了很长一段时间,我想继续前进。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您的控制器代码只会找到ID为$id的主题,以及ID为$id的主题(单数!)。该特定主题可能根本不会出现在该特定主题中。他们可能彼此无关。

要查找属于ID为$id的主题的主题,您可以执行以下操作:

$theme = Theme::find($id)->with('topics');

(这假设你的模型关系设置正确,你没有告诉我们那些)。 See the docs on eager loading

要访问视图中的主题,请执行以下操作:

@foreach ($theme->topics as $topic)
    ...
    {{ $topic->user->username }}
    ...

在开发过程中,您可以简单地

return $theme;
在控制器中

查看数据结构,以便了解如何处理和迭代它。