Symfony 4: Thực tiễn tốt nhất

Bất kỳ phiên bản chính nào của dự án là một cơ hội để xem lại các thực tiễn tốt nhất của nó. Hiện đại hóa chúng. Thích ứng chúng với các tính năng mới của dự án. Symfony 4 cũng không ngoại lệ.

Tiêu chuẩn hóa đầu tiên

Symfony 4 sẽ là một sự phát triển của các thực tiễn hiện tại, cố gắng nắm lấy các công cụ tiêu chuẩn hơn.

Symfony cố gắng nắm lấy các tiêu chuẩn PHP và web. Thật khó để tin rằng Symfony 2 bắt đầu vào thời điểm Composer không tồn tại. Kể từ đó, cộng đồng PHP đã bắt đầu nhóm Fig, thông qua một số khuyến nghị. Symfony là một trong những khuôn khổ chính đầu tiên áp dụng hầu hết các PSR, mà không phá vỡ tính tương thích ngược. PSR-3 để đăng nhập nhiều năm trước. PSR-4 để tự động tải. Gần đây, PSR-6 cho bộ nhớ đệm. Phiên bản tiếp theo của Symfony, phiên bản 3.3, triển khai PSR-16 cho bộ nhớ đệm và PSR-11 hoàn toàn mới cho khả năng tương tác của container. Chúng tôi thậm chí có thể có trường hợp sử dụng cho PSR-13.

Sử dụng các tiêu chuẩn giúp với khả năng tương tác nhưng cũng có thể tách mã của bạn khỏi khung.

Ứng dụng không có gói

Việc chuyển sang các ứng dụng không có gói đã được giải thích trong bài đăng trên blog trước đó. Tôi đề cập đến nó một lần nữa vì đây là một thay đổi quan trọng trong tập hợp thực hành tốt nhất hiện nay.

Biến môi trường

Cuốn sách thực hành tốt nhất của Symfony hiện tại giải thích rất chi tiết cách tạo cài đặt cấu hình trong ứng dụng Symfony. Khi nào nên sử dụng app / config /ameter.yml cho cấu hình liên quan đến cơ sở hạ tầng hoặc app / config / config.yml cho cấu hình liên quan đến ứng dụng.

Tôi sẽ đi xa như đề xuất để tránh sử dụng app / config / config.yml càng nhiều càng tốt. Có những trường hợp sử dụng hợp lệ, nhưng tôi có thể đếm chúng bằng một tay.

Symfony 4 won tựa có ứng dụng tương đương với app / config / tham số.yml. Sử dụng các biến môi trường thay thế. Đây là những gì hầu hết các khung làm trong các ngôn ngữ khác. Đây cũng là một trong những khuyến nghị của Tuyên ngôn ứng dụng 12 yếu tố. Một trong đó được khuyến khích bởi nhiều nền tảng lưu trữ hiện đại.

Sử dụng các biến môi trường, trong khi không hoàn hảo, có nhiều lợi ích so với những gì chúng ta hiện đang làm. Các biến môi trường là một cách quản lý cài đặt nhiều tiêu chuẩn hơn, tùy thuộc vào môi trường (chẳng hạn như không cần quản lý tham số.yml.dist). Các biến môi trường có thể được đọc bởi một số ứng dụng vì chúng độc lập với mã, khung và ngôn ngữ của bạn. Các biến môi trường giúp triển khai hệ thống tệp chỉ đọc khi chúng được tách rời khỏi mã của bạn. Các giá trị biến môi trường có thể được thay đổi "động" mà không cần triển khai lại ứng dụng của bạn (xóa bộ đệm cho Symfony). Cuối cùng, nhưng không kém phần quan trọng, các biến môi trường có thể được quản lý bằng các công cụ hiện có.

Lưu ý rằng việc lưu trữ bí mật trong các biến môi trường không phải là bảo mật nhiều hơn so với lưu trữ chúng trong tệp cấu hình.

Vì việc sử dụng các biến môi trường có thể gây cồng kềnh trong quá trình phát triển, nên sử dụng tệp .env tiêu chuẩn của Cameron là dễ dàng hơn và được khuyến nghị. Symfony 3.3 đi kèm với một thành phần Dotenv mới sẽ được sử dụng theo mặc định trong các ứng dụng Symfony 4. Việc chuyển đổi giữa tệp .env và các biến môi trường "thực" sẽ được thực hiện tự động và minh bạch.

Lưu ý rằng bạn cũng có thể xác định các biến môi trường trong tệp tham số.yaml nếu điều đó cảm thấy tốt hơn với bạn. Đó sẽ không phải là cách được đề nghị mặc dù. Lưu ý rằng tham số.yaml không phải là một lỗi chính tả của tham số.yml! Đây là một thay đổi khác trong Symfony 4 sẽ được thảo luận trong một bài viết sau.

Là một hiệu ứng phụ tuyệt vời, nó giúp đơn giản hóa cách môi trường Symfony và cờ gỡ lỗi được xử lý bởi cả ứng dụng điều khiển và ứng dụng web.

Hiện tại, công cụ bảng điều khiển Symfony có thể lấy môi trường và cờ gỡ lỗi thông qua các cờ --env và --no-debug. Hoặc cách khác thông qua các biến môi trường SYMFONY_ENV và SYMFONY_DEBUG.

Với Symfony 4, điều này không còn cần thiết nữa. APP_ENV và APP_DEBUG có thể được sử dụng cho cả bộ điều khiển phía trước web và công cụ bảng điều khiển.

Không còn nữa ./bin/console foo: bar --env = prod --no-debug hoặc SYMFONY_ENV = prod SYMFONY_DEBUG = 0 ./bin/console foo: bar. Chỉ cần sử dụng ./bin/console foo: thanh.

Nó chỉ hoạt động. Trong phát triển và trên các máy chủ sản xuất.

Symfony 4 có đầy đủ các đơn giản hóa như vậy.

Bộ điều khiển mặt trước web hợp nhất

Symfony 3 có hai bộ điều khiển web phía trước. Một tối ưu hóa cho sản xuất. Một tối ưu hóa cho sự phát triển. Symfony 4 chỉ sử dụng một. Không cần phải gỡ bỏ bộ điều khiển web phát triển nữa. Không còn vấn đề bảo mật nếu bạn quên.

Bạn sẽ nghĩ rằng mã phức tạp hơn trước. Điều này thậm chí không phải là trường hợp vì chúng tôi đã có thể loại bỏ rất nhiều mã di sản trên mạng. Nhờ các biến môi trường. Nhờ PHP 7 và loại bỏ bộ đệm bootstrap và class. Nhờ Symfony 3.3 giúp loại bỏ sự cần thiết của trình tải tự động cụ thể.

Makefile

Nhiều dự án có một số tập lệnh tùy chỉnh: trình bao bọc để chạy các bài kiểm tra đơn vị hoặc tích hợp, tập lệnh chạy máy chủ tích hợp PHP và hơn thế nữa. Các tập lệnh viết lệnh điều khiển Symfony sẽ không có ý nghĩa.

Để thuận tiện, bạn có thể đã xác định chúng trong tệp composer.json của ứng dụng. Silex thực hiện điều đó với một mục nhập tập lệnh chạy máy chủ tích hợp PHP. Nhưng điều đó đi kèm với nhiều vấn đề như thời gian chờ hoặc không hỗ trợ cho mã thoát ANSI.

Các lệnh tập trung giúp với khả năng khám phá mặc dù. Thay vào đó, sử dụng Makefile thì sao? Đây có lẽ là tính năng gây tranh cãi nhất của Symfony 4. Tôi đã qua lại. Nhưng tôi tin rằng nó mang lại rất nhiều giá trị và giúp giải quyết một số vấn đề.

làm là một công cụ "tiêu chuẩn" nổi tiếng. Nó mạnh hơn các tập lệnh do Composer điều hành. Nó không dựa vào PHP. Sử dụng nó để dễ dàng triển khai, để kết nối với các máy chủ từ xa thông qua SSH, để chạy thử nghiệm Blackfire. Sử dụng nó để chạy npm, gulp, webpack, bạn đặt tên cho nó. Nhiệm vụ trong đó sử dụng các lệnh Symfony là không thực tế cũng không mong muốn.

Lợi nhuận từ việc thực hiện các công thức nấu ăn song song. Don lồng chạy nhiệm vụ nếu không có gì thay đổi. Làm là mạnh mẽ.

Hãy để một ví dụ, xóa bộ nhớ cache. Symfony có một lệnh để xóa và làm nóng bộ đệm. Làm cả hai trong cùng một quy trình không hoạt động tốt vì PHP không thể tải lại một lớp nếu nó thay đổi. Nhưng điều này dễ dàng đạt được với make:

xóa bộ nhớ cache:
  @test -f bin / console && bin / console cache: xóa --no-warmup || rm -rf var / bộ đệm / *
.PHONY: xóa bộ nhớ cache
cache-warmup: xóa bộ nhớ cache
  @test -f bin / console && bin / console cache: warmup || echo "không thể làm nóng bộ đệm (cần symfony / console)"
.PHONY: khởi động bộ đệm

Một ví dụ khác, hầu hết các dự án PHP của tôi đều có hai tác vụ giúp chạy thử nghiệm Blackfire:

bf-dev:
   blackfire-player --endpoint = http: // `bin / console server: status --filter = address` chạy tests / bkf / all.bkf
.PHONY: bf-dev
bf-prod:
  blackfire-player --endpoint = https: //twig.sensiolabs.org chạy thử nghiệm / bkf / all.bkf --variable = "env = prod"
.PHONY: bf-prod

Bạn muốn chuyển sang một ứng dụng sang chế độ bảo trì trực tuyến trên mạng? Sử dụng make, không phải lệnh Symfony.

Quản lý tài sản

Assetic đã bị xóa trong Symfony Standard Edition 3.0. Hiện tại, chúng tôi không khuyến nghị bất kỳ sự thay thế nào vì thế giới JavaScript vẫn đang hoạt động trên một công cụ tiêu chuẩn của Google. Nhưng Symfony 4 sẽ đưa ra khuyến nghị và cung cấp một số tích hợp sâu. Thêm vào đó trong một vài tuần. Tuy nhiên, tôi muốn đề cập đến nó vì chúng tôi cũng hỗ trợ các tài sản là các liên kết tượng trưng / sao chép từ các gói sang web / gói / thông qua tài sản: cài đặt, nhưng đó có lẽ là thứ không tồn tại được Symfony 5. Đặc biệt là khi chúng tôi có cấu trúc ứng dụng không có gói hiện nay.

Hỗ trợ các thực tiễn tốt nhất mới có một số tác động đến cấu trúc thư mục, chủ đề tiếp theo của chủ đề. Giữ nguyên!

Được xuất bản lần đầu tại fabien.potencier.org.