Symfony - Gói
Gói Symfony là một tập hợp các tệp và thư mục được tổ chức theo một cấu trúc cụ thể. Các gói được mô hình hóa theo cách mà nó có thể được sử dụng lại trong nhiều ứng dụng. Bản thân ứng dụng chính được đóng gói dưới dạng một gói và nó thường được gọi làAppBundle.
Một gói có thể được đóng gói cụ thể cho một ứng dụng, chẳng hạn như AdminBundle (phần quản trị), BlogBundle (blog của trang), v.v. Các gói như vậy không thể được chia sẻ giữa một ứng dụng. Thay vào đó, chúng tôi có thể lập mô hình một phần nhất định của ứng dụng, chẳng hạn như blog dưới dạng gói chung để chúng tôi có thể chỉ cần sao chép gói từ ứng dụng này sang ứng dụng khác để sử dụng lại chức năng blog.
Cấu trúc của một gói
Cấu trúc cơ bản của một bó như sau.
Controller - Tất cả bộ điều khiển cần được đặt ở đây.
DependencyInjection - Tất cả mã và cấu hình liên quan đến tiêm phụ thuộc cần được đặt ở đây.
Resources/config - Các cấu hình liên quan đến gói được đặt ở đây.
Resources/view - Gói các mẫu xem liên quan được đặt ở đây.
Resources/public - Các bảng định kiểu liên quan, JavaScrip, hình ảnh, v.v., được đặt ở đây.
Tests - Nhóm các tệp kiểm tra đơn vị liên quan được đặt ở đây.
Tạo một gói
Hãy để chúng tôi tạo một gói đơn giản, TutorialspointDemoBundle trong chúng tôi HelloWorld ứng dụng.
Step 1- Chọn một không gian tên. Không gian tên của một gói phải bao gồm tên nhà cung cấp và tên gói. Trong trường hợp của chúng tôi, nó làTutorialspoint\DemoBundle.
Step 2 - Tạo một lớp trống, TutorialspointDemoBundle bằng cách mở rộng Bundle lớp và đặt nó dưới src/Tutorialspoint/DemoBundle.
namespace Tutorialspoint\DemoBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class TutorialspointDemoBundle extends Bundle {
}
Step 3 - Đăng ký lớp trong danh sách gói được ứng dụng hỗ trợ trong AppKernel lớp học.
public function registerBundles() {
$bundles = array(
// ...
// register your bundle
new Tutorialspoint\DemoBundle\TutorialspointDemoBundle(),
);
return $bundles;
}
Đây là tất cả những gì cần thiết để tạo một gói trống và tất cả các khái niệm khác đều giống với khái niệm của ứng dụng. Symfony cũng cung cấp một lệnh consolegenerate:bundle để đơn giản hóa quá trình tạo một gói mới, như sau.
php bin/console generate:bundle --namespace = Tutorialspoint/DemoBundle
Kết quả
Welcome to the Symfony bundle generator!
Are you planning on sharing this bundle across multiple applications? [no]: no
Your application code must be written in bundles. This command helps
you generate them easily.
Give your bundle a descriptive name, like BlogBundle.
Bundle name [Tutorialspoint/DemoBundle]:
In your code, a bundle is often referenced by its name. It can be the
concatenation of all namespace parts but it's really up to you to come
up with a unique name (a good practice is to start with the vendor name).
Based on the namespace, we suggest TutorialspointDemoBundle.
Bundle name [TutorialspointDemoBundle]:
Bundles are usually generated into the src/ directory. Unless you're
doing something custom, hit enter to keep this default!
Target Directory [src/]:
What format do you want to use for your generated configuration?
Configuration format (annotation, yml, xml, php) [annotation]:
Bundle generation
> Generating a sample bundle skeleton into app/../src/Tutorialspoint/DemoBundle
created ./app/../src/Tutorialspoint/DemoBundle/
created ./app/../src/Tutorialspoint/DemoBundle/TutorialspointDemoBundle.php
created ./app/../src/Tutorialspoint/DemoBundle/Controller/
created ./app/../src/Tutorialspoint/DemoBundle/Controller/DefaultController.php
created ./app/../tests/TutorialspointDemoBundle/Controller/
created ./app/../tests/TutorialspointDemoBundle/Controller/DefaultControllerTest.php
created ./app/../src/Tutorialspoint/DemoBundle/Resources/views/Default/
created ./app/../src/Tutorialspoint/DemoBundle/Resources/views/Default/index.html.twig
created ./app/../src/Tutorialspoint/DemoBundle/Resources/config/
created ./app/../src/Tutorialspoint/DemoBundle/Resources/config/services.yml
> Checking that the bundle is autoloaded
> Enabling the bundle inside app/AppKernel.php
updated ./app/AppKernel.php
> Importing the bundle's routes from the app/config/routing.yml file
updated ./app/config/routing.yml
> Importing the bundle's services.yml from the app/config/config.yml file
updated ./app/config/config.yml
Everything is OK! Now get to work :).