Laravel错误:路由缺少必要参数

35

我一直收到这个错误

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']);
});
});

目前我是这样解决的:<a href="{{ url('user/' . Auth::user()->nickname . '/profile') </a>">个人资料}} - Skel
4个回答

75
你需要向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>

没错,我尝试了 <li><a href="{{ url('user/' . Auth::user()->nickname . '/settings') </a>">设置}}</li> 这个代码,对我来说有效。 - Skel
感谢您的帮助。我现在已将其更改为<a href="{{ route('user.profile', Auth::user()->nickname) </a>">个人资料}}。 - Skel
似乎有点像一个 bug,因为即使您路由到的控制器方法具有默认参数(例如:public function profile($nickname = null){...}),仍然会出现错误。 - Andrew
在这种情况下,路由声明也应该声明为可选的,例如在路由参数占位符中:{nickname?},并且可选参数应该放在路由的最后。 - The Alpha

3
这是因为我们在路由中传递了变量{nickname},而没有传递id。它并不能从视图中获取该变量。
您应该这样编写:href="{{ route('user.profile', $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
这与这个问题无关?它是关于显示个人资料而不是显示和删除投票。 - Skel

-5
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']);
});
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接