Laravel在组前缀中默认使用Auth :: routes()

时间:2017-04-26 17:50:23

标签: laravel laravel-5 laravel-5.4

我正在尝试为“公司”创建一个带有变量的前缀来登录平台。所有用户都与公司绑定,因此不需要正常的/login。我想使用像`/ acme-company-name / login

这样的东西

我在新安装时使用默认的Laravel auth:php artisan make:auth

Route::group(['prefix' => '{company}'], function () {
    Auth::routes();
});

当我尝试导航到/company-name/login时,我看到以下错误:

Missing required parameters for [Route: login] [URI: {company}/login].

查看自动生成的login.blade.php内部,我看到函数调用route('login'),这似乎是一切都在破坏的地方。我想我需要一些方法来为该函数提供变量或者以某种方式重新定义“登录”路径?我宁愿不必替换呼叫Auth::routes(),但如果需要解决此问题,肯定会这样做。

我应该注意,我已尝试定义群组'as' => 'company'并更改route('company.login'),但后来我被告知路由company.login未定义。

5 个答案:

答案 0 :(得分:0)

你能尝试将$ company变量传递给函数吗?

Route::group(['prefix' => '{company}'], function ($company) {
    Auth::routes();
});

并确保在调用路线时通过company-name,因为它是必需参数。

login.blade.php中使用{{ url("$company/login") }}代替route('login')

答案 1 :(得分:0)

route()助手有多个参数;)

route('login', ['company' => $company])

答案 2 :(得分:0)

您需要在视图中分享您的前缀,并按以下方式设置路线:

Route::group(['prefix' => '{company}'],  function ($company) {
   view()->share('company', $company); // share $company in views
   Auth::routes();
});

现在你有$company Router的实例,你需要访问路由前缀值,你需要获取当前路由并得到company参数,这样你就应该重写route() 1}}辅助函数如下:

 {{ route('login',['company'=>$company->getCurrentRoute()->__get('company')]) }}
  // getCurrentRoute Get the currently dispatched route instance
  //__get  Dynamically access route parameters

修改

您可以编写自定义帮助函数,如下所示:

  /**
     * Generate the URL to a named route for Company Auth.
     *
     * @param  string  $name
     * @param  Router  $company 
     * @return string
     */
    function companyRoute($name,$company)
    {
        return app('url')->route($name, ['company'=>$company->getCurrentRoute()->__get('company')] ,true);
    }

答案 3 :(得分:0)

请检查适合我的代码。

Route::group(['prefix' => '/{company}'], function () {
    // ensure that auth controllers exists in right place (here it is App\Http\Controllers\Auth\LoginController)
    // in LoginController funtion 
    Auth::routes();

    //or you can try using custom routing like this
    Route::get('{something}', function($company, $something)
    {
        var_dump($company, $something);
    });
});

如果您在文件末尾定义此路线,则表示您提到的错误。

ErrorException in UrlGenerationException.php line 17:
Missing required parameters for [Route: login] [URI: {company}/login]. (View: \resources\views\auth\login.blade.php)

尝试将此路线定义为web.php中的第一条路线并检查。

由于

答案 4 :(得分:0)

  

查看自动生成的login.blade.php,我看到了函数调用路由(' login'),这似乎是一切都在破碎的地方。

是。通过做

user_read

您正在使所有身份验证路由采用Route::group(['prefix' => '{company}'], function () { Auth::routes(); }); 参数。因此,在您的观看次数中,您可以company而不是route('login')。 (对于所有auth路线都是一样的。)

然后可能在您的route('login', ['company' => Request::route('company')])中,您需要相应地覆盖App\Http\Controllers\Auth\LoginController方法:

login