【问题标题】:StartSession middleware clearing validate errorsStartSession 中间件清除验证错误
【发布时间】:2018-07-20 12:56:20
【问题描述】:

我正在处理本地化,不得不将\Illuminate\Session\Middleware\StartSession::class, 添加到我的内核中。

我之前的问题here

但现在我的$errors 始终为空,并且错误不会显示在视图中。

我也尝试在 StartSession 之后将\Illuminate\View\Middleware\ShareErrorsFromSession::class, 添加到我的内核,但错误仍然是空的。

控制器:

public function postRegister(Request $request) {
        $request_data = $request->all();
        $request->validate([
          'first-name'      => 'required',
          'last-name'       => 'required',
        ]);
        //other processing stuff
}

内核

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\Localization::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
}

我读到这样的错误{{ $errors-&gt;first('first-name') }}

我做错了什么?

【问题讨论】:

  • 您使用的是哪个版本?
  • @C2486 Laravel 5.5
  • 你把这个Illuminate\View\Middleware\ShareErrorsFromSession加进去了吗?
  • @C2486 是在 StartSession 之后
  • @C2486 另外,如果我将它们都删除,则会出现错误,但本地化不起作用并保持默认语言

标签: php laravel session error-handling localization


【解决方案1】:

我遇到了同样的问题,我通过在 $middlewareGroups web 数组而不是 $middleware 中添加 StartSession 类然后 Localization 类来解决它 因为如果你把它放在$middleware(每个HTTP请求执行)旧会话将被删除然后创建一个新会话。

【讨论】:

  • 是的,这正是我按照@NikolaGavric 的建议所做的
【解决方案2】:

我认为您将StartSessionShareErrorsFromSession 添加到错误的变量中,它们不是单独的HTTP 中间件,而是某些中间件的特征。

Web 是一个中间件组,其中包括各种较小的中间件,这些中间件丰富了围绕Request 发展的更多可用功能,例如使用CookieSessionCsrfToken 等。

尝试从$middleware 变量中删除StartSessionShareErrorsFromSession

编辑:同时向我们展示您的Localization.php 代码,谢谢

【讨论】:

  • @MehravishTemkar 我想从$middleware 中删除StartSessionShareErrorsFromSession 并没有解决您的问题?
  • 也许我解释得不对,在将 StartSession 和 ShareErrorsFromSession 添加到 $middleware 之前,我已经显示了所有错误。我必须添加 StartSession 进行本地化(检查上一个问题的链接)。我应该怎么做才能让它们都工作
  • 您是否忘记在您的Localization 文件中导入 Session 外观?
  • 我有'使用会话;'在本地化中。
  • 把它改成use Illuminate\Support\Facades\Session;
猜你喜欢
  • 2012-11-23
  • 2019-03-01
  • 2011-03-10
  • 2011-07-03
  • 2022-01-16
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多