Lớp mục tiêu AppHttpControllersAuthVerificationController không tồn tại

Nhiều ứng dụng web yêu cầu người dùng xác minh địa chỉ email của họ trước khi sử dụng ứng dụng. Thay vì buộc bạn phải triển khai lại điều này trên mỗi ứng dụng, Laravel cung cấp các phương thức thuận tiện để gửi và xác minh các yêu cầu xác minh email

Chuẩn bị mô hình

Để bắt đầu, hãy xác minh rằng mô hình App\User của bạn thực hiện hợp đồng Illuminate\Contracts\Auth\MustVerifyEmail

use Illuminate\Notifications\Notifiable;

use Illuminate\Contracts\Auth\MustVerifyEmail;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements MustVerifyEmail

Cân nhắc cơ sở dữ liệu

Cột Xác minh Email

Tiếp theo, bảng user của bạn phải chứa cột email_verified_at để lưu trữ ngày và giờ mà địa chỉ email đã được xác minh. Theo mặc định, việc di chuyển bảng users đi kèm với khung Laravel đã bao gồm cột này. Vì vậy, tất cả những gì bạn cần làm là chạy di chuyển cơ sở dữ liệu của mình

Lộ trình

Laravel bao gồm lớp

Auth::routes(['verify' => true]);

0 chứa logic cần thiết để gửi liên kết xác minh và xác minh email. Để đăng ký các tuyến đường cần thiết cho bộ điều khiển này, hãy chuyển tùy chọn

Auth::routes(['verify' => true]);

1 cho phương thức

Auth::routes(['verify' => true]);

2

Auth::routes(['verify' => true]);

Bảo vệ tuyến đường

Phần mềm trung gian định tuyến có thể được sử dụng để chỉ cho phép người dùng đã xác minh truy cập vào một tuyến nhất định. Laravel cung cấp một phần mềm trung gian

Auth::routes(['verify' => true]);

3, được định nghĩa tại

Auth::routes(['verify' => true]);

4. Vì phần mềm trung gian này đã được đăng ký trong nhân HTTP của ứng dụng của bạn, tất cả những gì bạn cần làm là đính kèm phần mềm trung gian vào định nghĩa tuyến đường

Route::get('profile', function () {

// Only verified users may enter...

})->middleware('verified');

Lượt xem

Laravel sẽ tạo tất cả các view xác minh email cần thiết khi lệnh

Auth::routes(['verify' => true]);

5 được thực thi. Chế độ xem này được đặt trong

Auth::routes(['verify' => true]);

6. Bạn có thể tự do tùy chỉnh chế độ xem này nếu cần cho ứng dụng của mình

Sau khi xác minh email

Sau khi địa chỉ email được xác minh, người dùng sẽ tự động được chuyển hướng đến

Auth::routes(['verify' => true]);

7. Bạn có thể tùy chỉnh vị trí chuyển hướng sau xác minh bằng cách xác định phương pháp hoặc thuộc tính

Auth::routes(['verify' => true]);

8 trên

Auth::routes(['verify' => true]);

9

protected $redirectTo = '/dashboard';

Sự kiện

Laravel gửi các sự kiện trong quá trình xác minh email. Bạn có thể đính kèm người nghe với những sự kiện này trong

Route::get('profile', function () {

// Only verified users may enter...

})->middleware('verified');

0 của bạn

Ở đây, tôi sẽ chỉ cho bạn cách làm việc Laravel Class "App\Http\Controllers\Auth" not found. Mình xin chia sẻ với các bạn app http controllers của lớp laravel auth not found. Chúng tôi sẽ sử dụng laravel auth not found. Tôi muốn cho bạn thấy Class 'App\Http\Controllers\Auth' không tìm thấy trong laravel. Được rồi, hãy đi sâu vào các bước

Bạn có thể giải quyết vấn đề 'Class "App\Http\Controllers\Auth" not found' trong phiên bản laravel 6, laravel 7, laravel 8 và laravel 9

Một vài ngày trước, tôi đang làm việc trên ứng dụng laravel của mình và tôi chỉ cần có người dùng hiện tại bằng cách sử dụng Auth facade. Khi tôi chạy dự án thì tôi thấy lỗi 'Class "App\Http\Controllers\Auth" not found'. bạn cũng có thể thấy ảnh chụp màn hình dưới đây

Vấn đề

Lớp mục tiêu AppHttpControllersAuthVerificationController không tồn tại

Sau một số nghiên cứu, tôi thấy rằng nếu bạn đang sử dụng mặt tiền "Auth" trong tệp Trình điều khiển, Phần mềm trung gian hoặc phiến thì bạn phải sử dụng mặt tiền ở trên cùng

vì vậy hãy xem giải pháp dưới đây và mã ví dụ tại đây

Giải pháp

Bạn phải thêm "use Illuminate\Support\Facades\Auth;" . Hãy xem dưới đây

Laravel 8 được phát hành vào tháng 9 năm 2020 với rất nhiều tính năng và thay đổi mới. Một trong những thay đổi đó là việc loại bỏ không gian tên tuyến đường mặc định

Mặc dù thay đổi này tương thích ngược, nghĩa là các dự án cũ hơn đã sử dụng Laravel 7. x có thể dễ dàng chuyển sang Laravel 8. x mà không phải thay đổi bất cứ điều gì, các dự án mới được tạo trong Laravel 8 (bắt đầu từ ngày 8 tháng 9 năm 2020) phải tính đến điều này

Nhiều nhà phát triển đã gặp sự cố trong các ứng dụng Laravel 8 mới tạo của họ khi họ cố tải các tuyến đường của mình và họ gặp phải một Ngoại lệ có nội dung như

Hãy nhớ rằng lỗi của bạn có thể không giống như thế này

Đừng lo lắng, mã của bạn không bị hỏng. Điều đã xảy ra là cách bạn quen làm mọi việc và cách mà hầu hết các hướng dẫn mô tả định tuyến hiện không hoạt động. Nhưng điều này có thể được khắc phục chỉ trong vài phút

Sự thay đổi

Cho đến Laravel 7, RouteServiceProvider. tệp php có đoạn mã sau

TuyếnDịch vụProvider. php trong Laravel 7. x

Điều này làm cho Laravel tải các route trong routes/web. php, sử dụng phần mềm trung gian web và không gian tên App\Http\Controllers. Ngược lại, điều này có nghĩa là bất cứ khi nào bạn khai báo một route bằng cú pháp chuỗi, Laravel sẽ tìm bộ điều khiển đó trong thư mục App\Http\Controllers

Trong Laravel 8, biến $namespace đã bị xóa và khai báo Route được đổi thành

TuyếnDịch vụProvider. php trong Laravel 8. x

Bây giờ, Laravel đang tìm các route bên trong trang web của bạn. php, như mọi khi. Nó cũng đang áp dụng phần mềm trung gian web, như mọi khi. Nhưng lưu ý rằng nó không còn sử dụng không gian tên trước đó nữa

Điều này có nghĩa là bắt đầu từ Laravel 8, khi bạn khai báo các route của mình bằng cú pháp chuỗi, Laravel sẽ không tìm kiếm bộ điều khiển của bạn bên trong App\Http\Controllers

Làm thế nào để tôi khắc phục điều này?

Vấn đề ở đây là Laravel không biết tìm bộ điều khiển của bạn ở đâu, vì vậy tất cả những gì chúng ta phải làm là cho nó biết. Có 3 cách bạn có thể thực hiện điều này

  • (khuyến khích)

Thêm không gian tên theo cách thủ công

Điều này khá đơn giản. Đi vào RouteserviceProvider của bạn. php và bạn sẽ thấy như sau

Tất cả những gì bạn cần làm là thêm ba dòng sau vào tệp này và Laravel sẽ quay lại sử dụng không gian tên mặc định như trong Laravel 7. x

Chúng ta vừa làm gì?

Nếu bạn cố chạy lại ứng dụng của mình, mọi thứ sẽ hoạt động

Sử dụng không gian tên đầy đủ

Điều này liên quan đến việc thay đổi tất cả các khai báo tuyến đường của bạn, nhưng ý tưởng rất đơn giản. thêm tên bộ điều khiển của bạn với không gian tên của họ. Xem ví dụ sau về PostController của chúng tôi bên trong thư mục app/Http/Controllers

Nếu bạn thử lại, mọi thứ sẽ chạy trơn tru

Sử dụng cú pháp hành động

Đây là giải pháp thay thế mà cá nhân tôi khuyên dùng vì tôi thấy nó chống lỗi đánh máy tốt hơn và theo kinh nghiệm của tôi cung cấp hỗ trợ IDE tốt hơn vì chúng tôi đang nói rõ ràng cho mã biết nên sử dụng lớp nào. Thay vì sử dụng cú pháp chuỗi thông thường, chúng ta có thể sử dụng cú pháp hành động trong đó chúng ta chỉ định lớp và phương thức sẽ sử dụng trong một mảng

Lưu ý ở đây chúng tôi không chuyển PostController trong dấu ngoặc kép mà thay vào đó là PostController. class, bên trong sẽ trả về ‘App\Http\Controllers\PostsController’. Giá trị thứ hai trong mảng là phương thức gọi trong bộ điều khiển đó, nghĩa là. “Trong PostController. php gọi phương thức 'tất cả'

Một lần nữa, nếu bạn cố chạy lại ứng dụng của mình, mọi thứ sẽ được thiết lập và chạy

Đóng nhận xét

Đến bây giờ, ứng dụng của bạn sẽ hoạt động trở lại. Nếu không, xin vui lòng yêu cầu giúp đỡ. Mọi người trong cộng đồng đều háo hức giúp một tay

Cho dù bạn đã thêm không gian tên theo cách thủ công, đã chỉ định không gian tên đầy đủ trong các tuyến đường của mình hay sử dụng cú pháp hành động, những gì bạn vừa làm là cho Laravel biết không gian tên mà bộ điều khiển của bạn thực sự ở đâu, vì vậy bây giờ nó thực sự biết nơi cần tìm

Nếu bạn thích những gì bạn đọc hoặc muốn tìm hiểu thêm những thứ hay ho liên quan đến Laravel, bạn có thể theo dõi tôi trên Twitter, nơi tôi đăng bài về lập trình, tinh thần kinh doanh và sống một cuộc sống tốt đẹp hơn

Nếu bạn hoặc ai đó mà bạn biết đang muốn thuê một nhà phát triển Laravel tự do, hãy liên hệ qua Twitter hoặc lên lịch một cuộc gọi nhanh để chúng tôi có thể kết nối