Laravel 错误:缺少路由所需的参数
Posted
技术标签:
【中文标题】Laravel 错误:缺少路由所需的参数【英文标题】:Laravel error: Missing required parameters for route 【发布时间】:2016-05-17 13:02:23 【问题描述】:我一直收到这个错误
ErrorException in UrlGenerationException.php line 17:
当任何页面加载并且我登录时。
这是我的导航的样子
@if(Auth::guest())
<li><a href=" url('/login') ">Log In</a></li>
<li><a href=" url('/register') ">Sign Up</a></li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> Auth::user()->nickname <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href=" route('user.profile') ">Profile</a></li>
<li><a href=" route('user.settings') ">Settings</a></li>
<li><a href=" url('/logout') ">Log Out</a></li>
</ul>
</li>
@endif
我遇到的问题是 route('user.profile') 不起作用??
当我点击链接时 www.mydomain.com/User/SCRATK/profile 工作正常,但由于此错误页面无法加载??
Missing required parameters for [Route: user.profile] [URI: user/nickname/profile].
这是我的路线文件
Route::group(['middleware' => 'web'], function ()
Route::auth();
Route::get('/', ['as' => 'home', 'uses' => 'BaseController@index']);
Route::group(['namespace' => 'User', 'prefix' => 'user'], function()
Route::get('nickname/settings', ['as' => 'user.settings', 'uses' => 'SettingsController@index']);
Route::get('nickname/profile', ['as' => 'user.profile', 'uses' => 'ProfileController@index']);
);
);
【问题讨论】:
我现在已经这样解决了 简介 【参考方案1】:你必须将路由参数传递给route
方法,例如:
<li><a href=" route('user.profile', $nickname) ">Profile</a></li>
<li><a href=" route('user.settings', $nickname) ">Settings</a></li>
这是因为,两条路由在路由声明中都有一个nickname
。例如,我使用了$nickname
,但请确保将$nickname
更改为适当的值/变量,例如,它可能类似于以下内容:
<li><a href=" route('user.settings', auth()->user()->nickname) ">Settings</a></li>
【讨论】:
是的,我试过 设置 a> 这对我有用 感谢您的帮助。我现在将其更改为 Profile 似乎有点像一个错误,因为即使您要路由到的控制器方法具有默认参数,仍然会出现错误,例如:public function profile($nickname = null)... 在这种情况下,路由声明也应该声明为可选,例如在路由参数占位符中:nickname?
并且可选参数应该放在路由的最后。【参考方案2】:
我在 laravel 5.2 中的解决方案
Form::open(['route' => ['votes.submit', $video->id], 'method' => 'POST'])
<button type="submit" class="btn btn-primary">
<span class="glyphicon glyphicon-thumbs-up"></span> Votar
</button>
Form::close()
我的路由文件(在中间件下)
Route::post('votar/id', [
'as' => 'votes.submit',
'uses' => 'VotesController@submit'
]);
Route::delete('votar/id', [
'as' => 'votes.destroy',
'uses' => 'VotesController@destroy'
]);
【讨论】:
这和这个问题无关?这是关于显示个人资料而不显示和删除投票【参考方案3】:Route::group(['middleware' => 'web'], function ()
Route::auth();
Route::get('/', ['as' => 'home', 'uses' => 'BaseController@index']);
Route::group(['namespace' => 'User', 'prefix' => 'user'], function()
Route::get('nickname/settings', ['as' => 'user.settings', 'uses' => 'SettingsController@index']);
Route::get('nickname/profile', ['as' => 'user.profile', 'uses' => 'ProfileController@index']);
);
);
【讨论】:
【参考方案4】:这是因为我们没有将 id 传递给路由,因为我们在路由中传递了变量 nickname。它不是从视图中获取的。
你应该 href=" route('user.profile', $nickname) 这样它就可以将变量发送到路由。
【讨论】:
以上是关于Laravel 错误:缺少路由所需的参数的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 缺少[路线:编辑] [URI:cruds / {agency} / {id} / edit]所需的参数
Laravel 缺少 [Route: destroy] 所需的参数。