微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

缺少 [Route: verify.verify] [URI: {lang}/verify-email/{id}/{hash}] [缺少参数:lang] Laravel 8 的必需参数

如何解决缺少 [Route: verify.verify] [URI: {lang}/verify-email/{id}/{hash}] [缺少参数:lang] Laravel 8 的必需参数

由于以下问题,无法验证电子邮件验证测试: 缺少 [Route: verify.verify] [URI: {lang}/verify-email/{id}/{hash}] [缺少参数:lang] 的必需参数。

我在我的应用程序中实现了一种多语言方法。所以我通过中间件传递语言环境。我已经改变了我的所有观点,以考虑到语言环境 app()->getLocale() 等。

我在我的 web.PHP添加了 Route::Group,如下所示:

<?PHP

use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;

Route::redirect('/','en',301);

Route::group(['prefix' => '{lang}','where' => ['lang' => '[a-zA-Z]{2}'],'middleware' => 'setlanguage'],function() {
  

Route::get('/','App\Http\Controllers\welcomeController@index')->name('welcome');

Auth::routes();
require __DIR__.'/auth.PHP';

Route::get('/dashboard',function () {
    return view('dashboard');
})->middleware(['auth'])->name('dashboard');


Route::get('/home',[App\Http\Controllers\HomeController::class,'index'])->name('home');

});

如您所见,我正在调用 auth.PHP,其中包含我的电子邮件验证控制器的路由:

<?PHP
use App\Http\Controllers\Auth\EmailVerificationNotificationController;
use App\Http\Controllers\Auth\EmailVerificationPromptController;
use App\Http\Controllers\Auth\VerifyEmailController;
use Illuminate\Support\Facades\Route;

Route::get('/verify-email',[EmailVerificationPromptController::class,'__invoke'])
                ->middleware('auth')
                ->name('verification.notice');

Route::get('/verify-email/{id}/{hash}',[VerifyEmailController::class,'__invoke'])
                ->middleware(['auth','signed','throttle:6,1'])
                ->name('verification.verify');

Route::post('/email/verification-notification',[EmailVerificationNotificationController::class,'store'])
                ->middleware(['auth',1'])
                ->name('verification.send');

这是我的 EmailVerificationTest.PHP,其中第二次和第三次测试失败:

<?PHP

namespace Tests\Feature;

use App\Models\User;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Verified;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\URL;
use Tests\TestCase;

class EmailVerificationTest extends TestCase
{
    use RefreshDatabase;

    public function test_email_verification_screen_can_be_rendered()
    {
        $user = User::factory()->create([
            'email_verified_at' => null,]);

        $response = $this->actingAs($user)->get('/en/verify-email');

        $response->assertStatus(200);
    }

    public function test_email_can_be_verified()
    {
        Event::fake();

        $user = User::factory()->create([
            'email_verified_at' => null,]);

        $verificationUrl = URL::temporarySignedRoute(
            'verification.verify',Now()->addMinutes(60),['id' => $user->id,'hash' => sha1($user->email)]
        );

        $response = $this->actingAs($user)->get($verificationUrl);

        Event::assertdispatched(Verified::class);
        $this->assertTrue($user->fresh()->hasverifiedEmail());
        $response->assertRedirect(RouteServiceProvider::HOME.'?verified=1');
    }

    public function test_email_is_not_verified_with_invalid_hash()
    {
        $user = User::factory()->create([
            'email_verified_at' => null,'hash' => sha1('wrong-email')]
        );

        $this->actingAs($user)->get($verificationUrl);

        $this->assertFalse($user->fresh()->hasverifiedEmail());
    }
}

如果我取出 Auth:routes() 并要求 DIR.'/auth.PHP' 从 Route::Group 外部,它会工作,但它不会在其路由中考虑区域设置我想保留。

关于如何在保持语言环境的同时检查上述测试的任何想法。

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。