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']);
}
我创建了一个允许用户创建 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']);
}