【问题标题】:Cannot use Auth::routes(); outside default routes/web.php不能使用 Auth::routes();外部默认路由/web.php
【发布时间】:2018-02-27 22:36:38
【问题描述】:

我有一个简单的应用程序,在 RouteServiceProvider 中有一个组。

// Web routes
protected function mapWebRoutes()
{
    Route::group(['domain' => 'example.com']), function()
    {
        Route::middleware('web')
            ->namespace($this->namespace);
            ->group(base_path('routes/web.php'));
    });


     // Match any other domains or subdomains
    Route::group(['domain' => '{domain}'], function()
    {
        Route::middleware('web')
            ->namespace($this->namespace)
            ->group(base_path('routes/org.php'));
    });

}

routes/web.php 我可以打电话给Auth::routes(); 很好;

但是在routes/org.php 中,我从我的视图中得到了一个缺少的必需参数,这些参数需要命名的身份验证路由(默认为 laravel)

“缺少 [Route: login] [URI: login] 所需的参数。(查看:.../resources/views/layouts/loginmenu.blade.php)(查看:..”

【问题讨论】:

  • 我认为 Auth::routes() 需要是全局的,不仅特定于子域​​,而且您会收到此错误,因为您的 example.com 正在寻找登录路径但没有找到它。为了让它工作,你可以在 web.php 中包含你的org.php 并且应该可以工作
  • 为什么需要使用其他路由器? - 我认为这没有必要
  • @kamiyar 除了登录/注册之外,大多数视图都是独一无二的。示例:基于路由组的 get('/' , ) 的差异控制器。宁愿在有组织的文件中而不是在嵌套函数中执行此操作。

标签: laravel


【解决方案1】:

问题不在于 Auth::routes 函数,而是 {domain} 通配符没有在路由中设置域(就像没有通配符一样)

要使用默认身份验证路由命名约定,您必须更新视图以在名称旁边包含域参数。

示例:

{{ route('login') }}

需要

{{ route('login', ['domain'=>$domain]) }}

当然,您必须使域变量在视图中可用。最简单的方法(而不是像疯子一样在控制器周围传递它,而是简单地与视图共享域变量。

在我调用的 Controller 构造函数的中间件中:

view()->share('domain', $domain);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2020-04-27
    • 2017-07-21
    • 2017-08-30
    • 2014-07-25
    • 2016-10-30
    相关资源
    最近更新 更多