【问题标题】:Laravel error: Missing required parameters for routeLaravel 错误:缺少路由所需的参数
【发布时间】: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']);
});
});

【问题讨论】:

  • 我现在已经这样解决了 简介

标签: php laravel laravel-routing


【解决方案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) }} 这样它就可以将变量发送到路由。

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签