Kịch bản:Symfony2 - làm thế nào để mở rộng một bó nhà cung cấp (ví dụ của FOSFacebookBundle)
Tôi đang sử dụng một bó (FOSFacebookBundle) cho phép tôi để thiết lập các thông số cho chính xác một ứng dụng facebook trong cấu hình của tôi. Tất cả mọi thứ hoạt động hoàn hảo tốt, nhưng bây giờ tôi cần phải thiết lập không chỉ một ứng dụng, nhưng nhiều.
cách tiếp cận của tôi:
Tôi đã tạo một AcmeFacebookBundle, cho phép nhiều ứng dụng được xác định (cấu hình quy định tại Acme \ FacebookBundle \ DependencyInjection \ Cấu hình) trong một mảng như sau:
acme_facebook:
apps:
some_competition:
server_url: %acme.facebook.some_competition.server_url%
file: %kernel.root_dir%/../vendor/facebook/php-sdk/src/base_facebook.php
alias: facebook
app_id: %acme.facebook.some_competition.app_id%
secret: % acme .facebook.some_competition.secret%
cookie: true
permissions: [email, user_birthday, user_location]
some_other_competition:
server_url: %acme.facebook. some_other_competition.server_url%
file: %kernel.root_dir%/../vendor/facebook/php-sdk/src/base_facebook.php
alias: facebook
app_id: %acme.facebook. some_other_competition.app_id%
secret: % acme .facebook. some_other_competition.secret%
cookie: true
permissions: [email, user_birthday, user_location]
Trong Acme \ FacebookBundle \ DependencyInjection \ AcmeFacebookExtension Tôi sau đó lặp qua tất cả các ứng dụng. Ý tưởng là so sánh tham số server_url với URL hiện tại và ghi đè cấu hình fos_facebook với tôi.
class AcmeFacebookExtension extends Extension
{
...
/**
* {@inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
foreach ($config['apps'] as $app)
{
// check for matching path here?
foreach (array('file', 'app_id', 'secret', 'cookie', 'domain', 'logging', 'culture', 'permissions') as $attribute)
{
$container->setParameter('fos_facebook.' . $attribute, $app[$attribute]);
}
}
}
Vấn đề:
Nhưng điều này là chính xác nơi tôi bị mắc kẹt. Rõ ràng, tôi không có quyền truy cập vào đối tượng Yêu cầu hoặc DiC từ bên trong AcmeFacebookExtension để thực hiện so sánh này. Tôi có hoàn toàn sai trong cách tiếp cận của mình không? Bạn có ý tưởng nào tốt hơn về cách giải quyết vấn đề này không?
questin khác nhau, cùng một mục tiêu: [Symfony2 cấu hình có điều kiện tải] (http://stackoverflow.com/questions/9603384/symfony2-load-có điều kiện-cấu hình) – leek
Vâng, tôi không chắc chắn nếu thiết lập cấu hình trong bộ điều khiển của bạn là cách tiếp cận đúng mặc dù? Tiêm cấu hình khi phân tích cú pháp cấu hình xảy ra có cảm giác giống như cách đúng để thực hiện ... – Burgi