Laravel 5.2 仅尝试显示视图时出错

Laravel 5.2 Error while simply trying to display a view

我创建了一个允许用户创建 theme/post 的视图。该视图的 link 在我的导航栏中。但问题是当我尝试单击 link(显示视图)时,我被重定向到主页,没有任何错误。

在导航栏的 link 中,我输入了 <li><a href="{{ route('createtheme') }}">,它只是激活了名称为 "createtheme" 的路由。这条路线如下: Route::get('/theme/create', 'ThemesController@create')->name('createtheme');。 所以这激活了 ThemesController.php 中的创建方法。即:

public function create()
{
    return view('themes.create');
}

所以如果我没看错的话,这应该能给我正确的观点,对吧?而且它没有给我任何错误,所以我不知道去哪里找。

这是我要显示的视图:

@extends('layouts.default')

@section('content')
<div class="container main-content">
    <div class="row first-row">
        <div class="col s12">
            <div class="card">
                <div class="card-content clearfix">
                    <span class="card-title">New theme</span>
                </div>
            </div>
            <div class="card">
                <div class="card-content">
                    <form method="POST" action="">
                        {{ csrf_field() }}
                        <input type="hidden" name="user_id" value="{{ Auth::user()->id }}">
                        <div class="row">
                            <div class="input-field col s6 has-error form-group">
                                <input id="title" class="form-control" type="text" name="title" placeholder="Title of topic">
                                <label for="title" class="active">Title of theme</label><span>Titel is mandatory!</span>
                            </div>
                            <div class="file-field input-field col s6 form-group">
                                <div class="btn cyan darken-1 disabled"><span>Attachment</span>
                                    <input id="attachement" type="file" name="attachment" class="disabled">
                                </div>
                                <div class="file-path-wrapper form-group">
                                    <input type="text" placeholder="geen" class="file-path validate form-control">
                                </div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col s12 form-group">
                                <textarea id="message-body" class="form-control" name="body"></textarea>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col s6">
                                Hier komen opties om het onderwerp te sluiten of
                                aan te geven dat het opgelost is, alleen bij bewerken
                            </div>
                            <div class="col s6">
                                <a href="" class="btn right cyan darken-1" type="submit">Save</a>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

@section('scripts')
<script type="text/javascript" src="{{ asset('js/ckeditor/ckeditor.js') }}">
</script>
<script type="text/javascript" src="{{ asset('js/editor.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/blog.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/materialize.js') }}">
</script>
@endsection

这里是与这个问题相关的路由。

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

当然还有 Store 方法:

public function store(Request $request)
{
    Theme::create($request->input()); //Dit doet hetzelfde als bovenstaande

    return redirect('/');
}

中间件

public function handle($request, Closure $next)
{

    if ($request->user()->role_id != 2 || 3)
    {
        return redirect('/');
    }

    return $next($request);
}

当时的问题:

  if ($request->user()->role_id != 2 || 3)

更具体地说是比较:

 (Integer value) != 2 || 3

所有整数值都将 return true,甚至 0。例如:

 if (0 != 2 || 3) -> TRUE
 if (2 != 2 || 3) -> TRUE
 if (3 != 2 || 3) -> TRUE

你得到了重定向。在那个时候改变你的代码以获得正确的补偿(你没有正确使用运算符)。 最简单的方法:

 $allowed_role_ids = [2,3]; // array(2,3);
 if (!in_array($request->user()->role_id,$allowed_role_ids)){
    // redirect
 } 

你的控制器里有这个代码吗?

public function __construct()
{
    $this->middleware('auth');
}

如果是这样,您还没有登录。您将被重定向到主页。

尝试

public function __construct()
{
    $this->middleware('auth')->except(['store', 'create']);
}