Tự động tải kết xuất trong laravel là gì?

Khi gỡ lỗi được đặt thành false trong app/config/app. php, Hàm Artisan của Laravel Tối ưu hóa php artisan sẽ thực hiện hai việc. Chạy lệnh composer dump-autoload –optimize, cũng như tạo tệp bootstrap/compiled. php. Tệp này chứa rất nhiều tệp lớp khung công tác Laravel phổ biến và cho phép hệ thống chỉ yêu cầu một tệp mặc dù trên thực tế, khung được chia thành hàng trăm tệp

nộp trong

hướng dẫn

Eric L. Barnes

Eric là người tạo ra Laravel News và đã đưa tin về Laravel từ năm 2012

Đối tác tin tức của Laravel

Đối tác tin tức của Laravel

Hôm nay, chúng tôi muốn chia sẻ với các bạn PHP artisan dump-autoload Fix “class not found”. Trong bài đăng này, chúng tôi sẽ chỉ cho bạn cách chạy trình soạn thảo kết xuất tự động tải trong laravel, hãy tìm hiểu Làm thế nào để trình soạn thảo kết xuất tự động tải trong PHP? . Trong bài viết này, chúng ta sẽ tìm hiểu về lệnh “dump-autoload” không tồn tại với một ví dụ

PHP artisan dump-autoload Sửa "không tìm thấy lớp"

nội dung

Có những điều sau đây Đơn giản Giới thiệu về autoload laravel 6 Thông tin đầy đủ với ví dụ và mã nguồn

Vì tôi sẽ trình bày Bài đăng này bằng ví dụ Làm việc trực tiếp để phát triển lệnh “dump-autoload” không được xác định, do đó, laravel những gì trình soạn thảo kết xuất tự động tải làm được sử dụng cho ví dụ này như sau bên dưới

Chạy composer dump autoload trong laravel

Composer Autoload Laravel sẽ gọi Composer với cờ tối ưu hóa

kết xuất tự động tải sẽ 'biên dịch lại' tất cả các tải tệp tạo ra quá trình khởi động/biên dịch khổng lồ. php

Trình soạn thảo tự động tải Laravel

$ php artisan clear-compiled 
$ composer dump-autoload
$ php artisan optimize

kết xuất tự động tải mà không cần truy cập Shell

Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];

Ghi chú. Nếu chúng tôi nhận được thông báo "không tìm thấy lớp" một số loại lỗi khi chạy di chuyển, hãy thử chạy lệnh kết xuất tự động tải của nhà soạn nhạc. Tự động tải lớp của nhà soạn nhạc và rất dễ sửa chữa. Chạy nhà soạn nhạc dump-auto

Các gói là cách chính để thêm chức năng vào Laravel. Các gói có thể là bất cứ thứ gì từ một cách tuyệt vời để làm việc với các ngày như Carbon hoặc toàn bộ khung kiểm tra BDD như Behat

Tất nhiên, có nhiều loại gói khác nhau. Một số gói hoạt động độc lập, nghĩa là chúng hoạt động với bất kỳ khung nào, không chỉ Laravel. Cả Carbon và Behat đều là ví dụ về các gói độc lập. Bất kỳ gói nào trong số này có thể được sử dụng với Laravel bằng cách yêu cầu chúng trong tệp

$this->package['vendor/package'];

0 của bạn

Mặt khác, các gói khác được dành riêng để sử dụng với Laravel. Trong các phiên bản trước của Laravel, các loại gói này được gọi là "gói". Các gói này có thể có các định tuyến, bộ điều khiển, chế độ xem, cấu hình và di chuyển nhằm mục đích nâng cao ứng dụng Laravel. Vì không cần quy trình đặc biệt nào để phát triển các gói độc lập, hướng dẫn này chủ yếu đề cập đến việc phát triển các gói dành riêng cho Laravel

Tất cả các gói Laravel được phân phối thông qua Packagist và Composer, vì vậy việc tìm hiểu về các công cụ phân phối gói PHP tuyệt vời này là điều cần thiết

Tạo một gói

Cách dễ nhất để tạo một gói mới để sử dụng với Laravel là lệnh Artisan

$this->package['vendor/package'];

1. Trước tiên, bạn sẽ cần đặt một vài tùy chọn trong tệp

$this->package['vendor/package'];

2. Trong tệp đó, bạn sẽ tìm thấy tùy chọn

$this->package['vendor/package'];

3 và

$this->package['vendor/package'];

4. Những giá trị này sẽ được sử dụng để tạo tệp

$this->package['vendor/package'];

0 cho gói mới của bạn. Khi bạn đã cung cấp các giá trị đó, bạn đã sẵn sàng xây dựng gói bàn làm việc

Ban hành Lệnh Workbench Artisan

________số 8

Tên nhà cung cấp là một cách để phân biệt gói của bạn với các gói khác cùng tên của các tác giả khác nhau. Ví dụ: nếu tôi [Taylor Otwell] tạo một gói mới có tên "Zapper", tên nhà cung cấp có thể là

$this->package['vendor/package'];

6 trong khi tên gói sẽ là

$this->package['vendor/package'];

7. Theo mặc định, bàn làm việc sẽ tạo các gói bất khả tri của khung;

Khi lệnh

$this->package['vendor/package'];

1 đã được thực thi, gói của bạn sẽ có sẵn trong thư mục

$this->package['vendor/package'];

1 của bản cài đặt Laravel của bạn. Tiếp theo, bạn nên đăng ký
Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];
34 đã được tạo cho gói của bạn. Bạn có thể đăng ký nhà cung cấp bằng cách thêm nó vào mảng
Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];
35 trong tệp
Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];
36. Điều này sẽ hướng dẫn Laravel tải gói của bạn khi ứng dụng của bạn bắt đầu. Các nhà cung cấp dịch vụ sử dụng quy ước đặt tên
Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];
37. Vì vậy, sử dụng ví dụ trên, bạn sẽ thêm
Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];
38 vào mảng
Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];
35

Khi nhà cung cấp đã được đăng ký, bạn đã sẵn sàng bắt đầu phát triển gói của mình. Tuy nhiên, trước khi đi sâu vào, bạn có thể muốn xem lại các phần bên dưới để làm quen với cấu trúc gói và quy trình phát triển

Ghi chú. Nếu không tìm thấy nhà cung cấp dịch vụ của bạn, hãy chạy lệnh

$this->package['vendor/package'];

30 từ thư mục gốc của ứng dụng của bạn

Cấu trúc gói

Khi sử dụng lệnh

$this->package['vendor/package'];

1, gói của bạn sẽ được thiết lập với các quy ước cho phép gói tích hợp tốt với các phần khác của khung Laravel

Cấu trúc thư mục gói cơ bản

$this->package['vendor/package'];

5

Hãy khám phá cấu trúc này hơn nữa. Thư mục

$this->package['vendor/package'];

32 là ngôi nhà của tất cả các lớp trong gói của bạn, bao gồm cả lớp
Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];
34. Các thư mục
Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];
31,

$this->package['vendor/package'];

35,

$this->package['vendor/package'];

9 và
Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];
30, như bạn có thể đoán, chứa các tài nguyên tương ứng cho gói của bạn. Các gói có thể có bất kỳ tài nguyên nào trong số này, giống như các ứng dụng "thông thường"

Các nhà cung cấp dịch vụ

Các nhà cung cấp dịch vụ chỉ đơn giản là các lớp khởi động cho các gói. Theo mặc định, chúng chứa hai phương thức.

$this->package['vendor/package'];

38 và

$this->package['vendor/package'];

39. Trong các phương pháp này, bạn có thể làm bất cứ điều gì bạn thích. bao gồm tệp tuyến đường, đăng ký liên kết trong bộ chứa IoC, đính kèm vào sự kiện hoặc bất kỳ điều gì khác mà bạn muốn thực hiện

Phương thức

$this->package['vendor/package'];

39 được gọi ngay khi nhà cung cấp dịch vụ được đăng ký, trong khi lệnh

$this->package['vendor/package'];

38 chỉ được gọi ngay trước khi yêu cầu được định tuyến. Vì vậy, nếu các hành động trong nhà cung cấp dịch vụ của bạn phụ thuộc vào một nhà cung cấp dịch vụ khác đã được đăng ký hoặc bạn đang ghi đè các dịch vụ bị ràng buộc bởi nhà cung cấp khác, thì bạn nên sử dụng phương pháp

$this->package['vendor/package'];

38

Khi tạo một gói bằng cách sử dụng

$this->package['vendor/package'];

1, lệnh

$this->package['vendor/package'];

38 sẽ chứa sẵn một hành động

$this->package['vendor/package'];

Phương pháp này cho phép Laravel biết cách tải đúng view, cấu hình và các tài nguyên khác cho ứng dụng của bạn. Nói chung, bạn không cần phải thay đổi dòng mã này, vì nó sẽ thiết lập gói bằng cách sử dụng các quy ước bàn làm việc

Theo mặc định, sau khi đăng ký một gói, tài nguyên của gói đó sẽ khả dụng bằng cách sử dụng một nửa "gói" của

$this->package['vendor/package'];

05. Tuy nhiên, bạn có thể chuyển đối số thứ hai vào phương thức

$this->package['vendor/package'];

06 để ghi đè hành vi này. Ví dụ

Route::get['/quicksetting', function[]
{
    \Artisan::call['dump-autoload'];
    echo 'dump-autoload complete';
}];
3

Không có "vị trí mặc định" cho các lớp nhà cung cấp dịch vụ. Bạn có thể đặt chúng ở bất cứ đâu bạn thích, có thể sắp xếp chúng trong một không gian tên

$this->package['vendor/package'];

07 trong thư mục

$this->package['vendor/package'];

08 của bạn. Tệp có thể được đặt ở bất kỳ đâu, miễn là Trình soạn thảo biết cách tải lớp

Nếu bạn đã thay đổi vị trí tài nguyên của gói, chẳng hạn như tệp cấu hình hoặc chế độ xem, bạn nên chuyển đối số thứ ba cho phương thức

$this->package['vendor/package'];

06 chỉ định vị trí tài nguyên của bạn

$this->package['vendor/package'];

3

Nhà cung cấp hoãn lại

Nếu bạn đang viết một nhà cung cấp dịch vụ không đăng ký bất kỳ tài nguyên nào như cấu hình hoặc chế độ xem, bạn có thể chọn đặt nhà cung cấp của mình ở chế độ "hoãn lại". Nhà cung cấp dịch vụ hoãn lại chỉ được tải và đăng ký khi một trong các dịch vụ mà nó cung cấp thực sự cần thiết cho bộ chứa IoC của ứng dụng. Nếu không có dịch vụ nào của nhà cung cấp cần thiết cho một chu kỳ yêu cầu nhất định, nhà cung cấp sẽ không bao giờ được tải

Để trì hoãn việc thực hiện nhà cung cấp dịch vụ của bạn, hãy đặt thuộc tính

$this->package['vendor/package'];

70 trên nhà cung cấp thành

$this->package['vendor/package'];

71

Tiếp theo, bạn nên ghi đè phương thức

$this->package['vendor/package'];

72 từ lớp cơ sở

$this->package['vendor/package'];

73 và trả về một mảng gồm tất cả các liên kết mà nhà cung cấp của bạn thêm vào bộ chứa IoC. Ví dụ: nếu nhà cung cấp của bạn đăng ký

$this->package['vendor/package'];

74 và

$this->package['vendor/package'];

75 trong vùng chứa IoC, phương thức

$this->package['vendor/package'];

72 của bạn sẽ giống như sau

$this->package['vendor/package'];

0

Quy ước trọn gói

Khi sử dụng các tài nguyên từ một gói, chẳng hạn như các mục cấu hình hoặc dạng xem, cú pháp dấu hai chấm thường sẽ được sử dụng

Đang tải một chế độ xem từ một gói

$this->package['vendor/package'];

7

Truy xuất một mục cấu hình gói

$this->package['vendor/package'];

6

Ghi chú. Nếu gói của bạn có chứa các lần di chuyển, hãy xem xét thêm tiền tố tên di chuyển vào tên gói của bạn để tránh xung đột tên lớp tiềm ẩn với các gói khác

Quy trình phát triển

Khi phát triển một gói, sẽ rất hữu ích nếu bạn có thể phát triển trong ngữ cảnh của một ứng dụng, cho phép bạn dễ dàng xem và thử nghiệm các mẫu của mình, v.v. Vì vậy, để bắt đầu, hãy cài đặt một bản sao mới của Laravel framework, sau đó sử dụng lệnh

$this->package['vendor/package'];

1 để tạo cấu trúc gói của bạn

Sau khi lệnh

$this->package['vendor/package'];

1 đã tạo gói của bạn. Bạn có thể

$this->package['vendor/package'];

79 từ thư mục

$this->package['vendor/package'];

60 và

$this->package['vendor/package'];

61 gói hàng của bạn ngay từ bàn làm việc. Điều này sẽ cho phép bạn phát triển gói một cách thuận tiện trong ngữ cảnh ứng dụng mà không bị sa lầy bởi các lệnh

$this->package['vendor/package'];

62 liên tục

Vì các gói của bạn nằm trong thư mục

$this->package['vendor/package'];

1, bạn có thể thắc mắc làm thế nào Trình soạn thảo biết để tự động tải các tệp của gói của bạn. Khi thư mục

$this->package['vendor/package'];

1 tồn tại, Laravel sẽ quét nó một cách thông minh để tìm các gói, tải các tệp tự động tải Trình soạn thảo của chúng khi ứng dụng khởi động

Nếu bạn cần tạo lại các tệp tự động tải của gói, bạn có thể sử dụng lệnh

$this->package['vendor/package'];

30. Lệnh này sẽ tạo lại các tệp tự động tải cho dự án gốc của bạn, cũng như bất kỳ bàn làm việc nào bạn đã tạo

Chạy lệnh Artisan Autoload

Định tuyến gói

Trong các phiên bản trước của Laravel, mệnh đề

$this->package['vendor/package'];

66 được sử dụng để chỉ định URI nào mà một gói có thể phản hồi. Tuy nhiên, trong Laravel 4, một gói có thể đáp ứng bất kỳ URI nào. Để tải tệp tuyến đường cho gói của bạn, chỉ cần

$this->package['vendor/package'];

67 tệp đó từ bên trong phương thức

$this->package['vendor/package'];

38 của nhà cung cấp dịch vụ của bạn

Bao gồm tệp định tuyến từ nhà cung cấp dịch vụ

$this->package['vendor/package'];

9

Ghi chú. Nếu gói của bạn đang sử dụng bộ điều khiển, bạn cần đảm bảo rằng chúng được định cấu hình đúng trong phần tải tự động của tệp

$this->package['vendor/package'];

0

Cấu hình gói

Truy cập tệp cấu hình gói

Một số gói có thể yêu cầu tệp cấu hình. Các tệp này phải được xác định giống như các tệp cấu hình ứng dụng điển hình. Và, khi sử dụng phương pháp đăng ký tài nguyên

$this->package['vendor/package'];

90 mặc định trong nhà cung cấp dịch vụ của bạn, có thể được truy cập bằng cú pháp "dấu hai chấm" thông thường

$this->package['vendor/package'];

2

Truy cập cấu hình gói tệp đơn

Tuy nhiên, nếu gói của bạn chứa một tệp cấu hình duy nhất, bạn có thể chỉ cần đặt tên cho tệp là

$this->package['vendor/package'];

91. Khi điều này được thực hiện, bạn có thể truy cập trực tiếp vào các tùy chọn mà không cần chỉ định tên tệp

$this->package['vendor/package'];

50

Đăng ký không gian tên tài nguyên theo cách thủ công

Đôi khi, bạn có thể muốn đăng ký các tài nguyên gói, chẳng hạn như các chế độ xem bên ngoài phương thức

$this->package['vendor/package'];

90 điển hình. Thông thường, điều này sẽ chỉ được thực hiện nếu tài nguyên không ở vị trí thông thường. Để đăng ký tài nguyên theo cách thủ công, bạn có thể sử dụng phương pháp

$this->package['vendor/package'];

93 của các lớp

$this->package['vendor/package'];

94,

$this->package['vendor/package'];

95 và

$this->package['vendor/package'];

96

$this->package['vendor/package'];

51

Khi không gian tên đã được đăng ký, bạn có thể sử dụng tên không gian tên và cú pháp "dấu hai chấm" để truy cập tài nguyên

$this->package['vendor/package'];

7

Chữ ký phương thức cho

$this->package['vendor/package'];

93 giống hệt nhau trên các lớp

$this->package['vendor/package'];

94,

$this->package['vendor/package'];

95 và

$this->package['vendor/package'];

96

Tập tin cấu hình xếp tầng

Khi các nhà phát triển khác cài đặt gói của bạn, họ có thể muốn ghi đè lên một số tùy chọn cấu hình. Tuy nhiên, nếu chúng thay đổi các giá trị trong mã nguồn gói của bạn, chúng sẽ bị ghi đè vào lần tiếp theo Trình soạn thảo cập nhật gói. Thay vào đó, nên sử dụng lệnh thủ công

$this->package['vendor/package'];

21

$this->package['vendor/package'];

53

Khi lệnh này được thực thi, các tệp cấu hình cho ứng dụng của bạn sẽ được sao chép vào

$this->package['vendor/package'];

22 nơi nhà phát triển có thể sửa đổi chúng một cách an toàn

Ghi chú. Nhà phát triển cũng có thể tạo các tệp cấu hình dành riêng cho môi trường cho gói của bạn bằng cách đặt chúng vào

$this->package['vendor/package'];

23

Lượt xem gói

Nếu bạn đang sử dụng một gói trong ứng dụng của mình, đôi khi bạn có thể muốn tùy chỉnh chế độ xem của gói. Bạn có thể dễ dàng xuất các chế độ xem gói sang thư mục

$this->package['vendor/package'];

24 của riêng mình bằng lệnh Artisan

$this->package['vendor/package'];

25

$this->package['vendor/package'];

54

Lệnh này sẽ di chuyển các khung nhìn của gói vào thư mục

$this->package['vendor/package'];

26. Nếu thư mục này chưa tồn tại, nó sẽ được tạo khi bạn chạy lệnh. Khi các lượt xem đã được xuất bản, bạn có thể điều chỉnh chúng theo ý thích của mình. Các chế độ xem đã xuất sẽ tự động được ưu tiên hơn các tệp chế độ xem riêng của gói

Di chuyển gói

Tạo di chuyển cho các gói Workbench

Bạn có thể dễ dàng tạo và chạy di chuyển cho bất kỳ gói nào của mình. Để tạo di chuyển cho một gói trong bàn làm việc, hãy sử dụng tùy chọn

$this->package['vendor/package'];

27

$this->package['vendor/package'];

55

Chạy di chuyển cho các gói Workbench

$this->package['vendor/package'];

56

Chạy di chuyển cho một gói đã cài đặt

Để chạy di chuyển cho một gói đã hoàn thành được cài đặt qua Composer vào thư mục

$this->package['vendor/package'];

28, bạn có thể sử dụng lệnh

$this->package['vendor/package'];

29

$this->package['vendor/package'];

57

Nội dung gói

Chuyển nội dung gói sang công khai

Một số gói có thể có nội dung như JavaScript, CSS và hình ảnh. Tuy nhiên, chúng tôi không thể liên kết với nội dung trong thư mục

$this->package['vendor/package'];

28 hoặc

$this->package['vendor/package'];

1, vì vậy chúng tôi cần một cách để di chuyển những nội dung này vào thư mục

$this->package['vendor/package'];

502 của ứng dụng của chúng tôi. Lệnh

$this->package['vendor/package'];

503 sẽ giải quyết vấn đề này cho bạn

$this->package['vendor/package'];

58

Nếu gói vẫn còn trong

$this->package['vendor/package'];

1, hãy sử dụng chỉ thị

$this->package['vendor/package'];

27

$this->package['vendor/package'];

59

Lệnh này sẽ di chuyển nội dung vào thư mục

$this->package['vendor/package'];

506 theo nhà cung cấp và tên gói. Vì vậy, một gói có tên

$this->package['vendor/package'];

507 sẽ chuyển nội dung của nó sang

$this->package['vendor/package'];

508. Sử dụng quy ước xuất bản nội dung này cho phép bạn mã hóa đường dẫn nội dung một cách an toàn trong chế độ xem gói của bạn

xuất bản gói

Khi gói của bạn đã sẵn sàng để xuất bản, bạn nên gửi gói tới kho lưu trữ Packagist. Nếu gói dành riêng cho Laravel, hãy xem xét thêm thẻ

$this->package['vendor/package'];

509 vào tệp

$this->package['vendor/package'];

0 của gói của bạn

Ngoài ra, việc gắn thẻ các bản phát hành của bạn là một việc làm lịch sự và hữu ích để các nhà phát triển có thể dựa vào các phiên bản ổn định khi yêu cầu gói của bạn trong tệp

$this->package['vendor/package'];

0 của họ. Nếu phiên bản ổn định chưa sẵn sàng, hãy cân nhắc sử dụng chỉ thị

$this->package['vendor/package'];

512 Composer

Khi gói của bạn đã được xuất bản, vui lòng tiếp tục phát triển nó trong bối cảnh ứng dụng được tạo bởi

$this->package['vendor/package'];

1. Đây là một cách tuyệt vời để tiếp tục phát triển gói một cách thuận tiện ngay cả sau khi nó đã được xuất bản

Một số tổ chức chọn lưu trữ kho lưu trữ gói riêng cho các nhà phát triển của riêng họ. Nếu bạn quan tâm đến việc này, hãy xem lại tài liệu cho dự án Satis do nhóm Composer cung cấp

Sử dụng bãi chứa là gì

Nếu bạn cần tạo lại các tệp tự động tải của gói , bạn có thể sử dụng lệnh php artisan dump-autoload. Lệnh này sẽ tạo lại các tệp tự động tải cho dự án gốc của bạn, cũng như bất kỳ bàn làm việc nào bạn đã tạo.

Đổ tải tự động là gì?

php artisan dump-autoload. Nó tạo lại danh sách tất cả các lớp cần đưa vào dự án [autoload_classmap. php]. Nó sẽ 'biên dịch lại' vô số tệp tạo bootstrap/biên dịch khổng lồ. php. Nó sẽ không tải xuống bất kỳ thứ gì mới cho dự án.

Tại sao Composer kết xuất

Về cơ bản, vì Trình soạn thảo không thể nhìn thấy các tệp di chuyển mà bạn đang tạo , nên bạn phải chạy lệnh dump-autoload. .

Làm cách nào để cập nhật Trình soạn thảo trong laravel?

Cập nhật Trình cài đặt . Cập nhật nhà soạn nhạc toàn cầu. json và chạy bản cập nhật trình soạn nhạc .

Chủ Đề