Trong Symfony2, sự khác biệt giữa assetic:dumpvà assets:install? Mỗi lệnh này nên được sử dụng trong tình huống nào và theo thứ tự nào (nếu thứ tự có liên quan)?
Trong Symfony2, sự khác biệt giữa assetic:dumpvà assets:install? Mỗi lệnh này nên được sử dụng trong tình huống nào và theo thứ tự nào (nếu thứ tự có liên quan)?
Câu trả lời:
Tôi thực sự đã viết về điều này gần đây trong một bài báo về OroCRM, dựa trên Symfony 2. Nếu bạn muốn một số ngữ cảnh / lý do của các lệnh khác nhau, bạn có thể thấy nó thú vị.
Có hai hệ thống khác nhau để bao gồm các tệp giao diện người dùng (javascript, css, hình ảnh, v.v.) trong một ứng dụng Symfony. Các assets:installlệnh đến đầu tiên. Lệnh này sẽ tìm kiếm tất cả các Gói Symfony trong một ứng dụng để tìm
Resources/public
thư mục. Nếu được tìm thấy, assets:installlệnh sẽ sao chép hoặc liên kết biểu tượng các tệp từ Resources/publictới web/public/bundle/[bundle-name]. Đây là nơi các liên kết được tạo bằng assetshàm twig sẽ tìm kiếm các tệp này. Điều này
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
Trở thành cái này
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
Đó là tất cả những gì assetshệ thống làm. Nó cho phép bạn lưu trữ các tệp giao diện người dùng của mình với gói.
Các assetichệ thống là khác nhau. Với assetic, bạn liên kết đến các tệp như thế này.
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Có các thẻ tương tự cho bảng định kiểu và hình ảnh. Lưu ý rằng asseticcho phép bạn liên kết đến các tệp trong bất kỳ gói nào . ( @AcmeFooBundle). Assetic cũng sẽ cho phép bạn liên kết đến nhiều tệp trong một thư mục bằng ký tự đại diện.
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Một sự khác biệt asseticlà trong các liên kết được tạo ra. Trong devmôi trường, chúng sẽ trông giống như thế này.
<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>
Nghĩa là, các yêu cầu cho các tệp này sẽ chạy qua bộ điều khiển phía trước PHP ( app_dev.php) thông qua thiết lập các tuyến đặc biệt trong asseticgói. Điều này có nghĩa là, khi bạn đang ở devchế độ, bạn không bao giờ cần phải bán tài sản của mình. Chúng được đưa vào tự động. Nó cũng cho phép bạn áp dụng các bộ lọc cho các tệp. Ví dụ: phần sau áp dụng cssrewritebộ lọc cho các tệp được kéo vào.
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
Nếu bạn từng muốn lập trình thay đổi đầu ra của nội dung giao diện người dùng - hãy asseticcho phép bạn làm điều đó bằng cách viết các bộ lọc nhánh tùy chỉnh.
Tuy nhiên, đây là hiệu suất chuyên sâu. Trong sản xuất, thay vì liên kết từng tệp riêng lẻ thông qua tệp điều khiển phía trước PHP, HTML được tạo sẽ giống như thế này
<script type="text/javascript" src="/js/as5s31l.js"></script>
Từ đâu as5s31l.jsđến? Đó là những gì assetic:dumplệnh làm. Nó kết hợp tất cả các tệp javascript / css riêng lẻ (sau khi áp dụng các bộ lọc) và tạo ra một tệp đẹp, tĩnh, có thể lưu vào bộ nhớ cache để sản xuất.
Trừ khi dự án cho bạn biết cách khác, bạn nên luôn chạy assets:installvà assetic:dumpvì bạn sẽ không bao giờ biết gói bên thứ ba nào của mình sử dụng các lệnh này. Bạn chỉ cần chạy assetic:dumptrước khi triển khai hoặc xem ứng dụng ở prodchế độ. Thứ tự không liên quan.
Đối với hệ thống mà gói của bạn nên sử dụng - nếu bạn đã đọc phần trên và bạn không chắc chắn những gì asseticcó thể làm cho mình, hãy sử dụng assets. Bạn sẽ ổn thôi.
<script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script> cậu thực sự có nghĩa <script type="text/javascript" src="app.php/js/as5s31l.js"></script>