मेरे पास एक यमल लोडर है जो "प्रोफ़ाइल" के लिए अतिरिक्त कॉन्फ़िगरेशन आइटम लोड करता है (जहां एक एप्लिकेशन अलग-अलग प्रोफाइल का उपयोग कर सकता है, उदाहरण के लिए एक ही साइट के विभिन्न स्थानीय संस्करणों के लिए)। (थोड़ा सरलीकृत भी कैशिंग क्योंकि वहाँ है)सिम्फनी 2 - अपने स्वयं के यामल फ़ाइल लोडर में% पैरामीटर% का विश्लेषण कैसे करें?
# YamlProfileLoader.php
use Symfony\Component\Config\Loader\FileLoader;
use Symfony\Component\Yaml\Yaml;
class YamlProfileLoader extends FileLoader
{
public function load($resource, $type = null)
{
$configValues = Yaml::parse($resource);
return $configValues;
}
public function supports($resource, $type = null)
{
return is_string($resource) && 'yml' === pathinfo(
$resource,
PATHINFO_EXTENSION
);
}
}
लोडर और अधिक या कम इस तरह प्रयोग किया जाता है:
मेरे लोडर बहुत सरल है
$loaderResolver = new LoaderResolver(array(new YamlProfileLoader($locator)));
$delegatingLoader = new DelegatingLoader($loaderResolver);
foreach ($yamlProfileFiles as $yamlProfileFile) {
$profileName = basename($yamlProfileFile, '.yml');
$profiles[$profileName] = $delegatingLoader->load($yamlProfileFile);
}
तो YAML फ़ाइल है यह पार्स करने है:
# profiles/germany.yml
locale: de_DE
hostname: %profiles.germany.host_name%
फिलहाल, जिसके परिणामस्वरूप सरणी सचमुच शामिल सरणी कुंजी के लिए।
तो, वास्तविक पैरामीटर मान प्राप्त करने के लिए मैं% पैरामीटर को कैसे पार्स कर सकता हूं?
मैं सिम्फनी 2 कोड और दस्तावेज़ (और this SO question) के माध्यम से ट्रैवलिंग कर रहा हूं और यह नहीं पाया जा सकता कि यह फ्रेमवर्क के भीतर ही किया जाता है। मैं शायद अपना खुद का पैरामीटर पार्सर लिख सकता हूं - कर्नेल से पैरामीटर प्राप्त करें, खोज % foo% स्ट्रिंग्स और लुक-अप/प्रतिस्थापित करने के लिए ... लेकिन यदि कोई घटक उपयोग करने के लिए तैयार है, तो मैं इसका उपयोग करना पसंद करता हूं।
थोड़ा और पृष्ठभूमि देने के लिए, मैं इसे क्यों शामिल नहीं कर सकता मुख्य config.yml में: मैं app/config/profiles/*.yml
लोड करने में सक्षम होना चाहता हूं, जहां *
प्रोफ़ाइल नाम है, और मैं इसे पूरा करने के लिए अपने स्वयं के लोडर का उपयोग कर रहा हूं। अगर वाइल्डकार्ड आयात कॉन्फ़िगरेशन फ़ाइलों का कोई तरीका है, तो यह भी काम कर सकता है मुझे।
नोट: वर्तमान में 2.4 का उपयोग कर रहा है, लेकिन अगर यह मदद करता है तो 2.5 तक अपग्रेड करने के लिए तैयार है।