मैं सिम्फनी 2 के लिए नया हूं और मुझे कुछ साधारण समस्या का सामना करना पड़ा है, लेकिन मुझे यकीन नहीं है कि इसका प्रबंधन कैसे करें। मुझे एक साधारण तृतीय पक्ष वर्ग का उपयोग करने की आवश्यकता है और मुझे यकीन नहीं है कि इसे परियोजना संरचना में कहां और कैसे स्टोर किया जाए। क्या मुझे स्टोर करना चाहिए मेरे बंडल में एक सेवा है या शायद मुझे इसे विक्रेता निर्देशिका में स्टोर करना चाहिए? और अगर मैं विक्रेताओं में इसे स्टोर करूंगा, तो क्या सिम्फनी समर्थित विक्रेताओं नहीं है कि वहां libs स्टोर करने के लिए यह एक बुरा अभ्यास नहीं है?Symfony2 में सरल तृतीय पक्ष वर्ग को स्टोर करने के लिए कहां?
उत्तर
आमतौर पर आप Composer के साथ अपने प्रोजेक्ट में शामिल होते हैं। मेरा सुझाव है कि packagist पर अपनी कक्षा के लिए एक संगीतकार पैकेज है या नहीं, अन्यथा आपको संगीतकार के साथ इसकी आवश्यकता नहीं हो सकती है।
संगीतकार vendor
निर्देशिका में अपनी कक्षाएं डालता है, आपको वहां सभी 'विक्रेता' (3 वें पार्टी पुस्तकालय) रखना चाहिए। उस निर्देशिका में उन्हें कहां रखा जाए, इस पर एक नज़र डालें, ताकि संगीतकार ऑटोलोडर इसे स्वत: लोड कर सके।
उसके बाद, उस विशिष्ट श्रेणी के लिए एक बंडल बनाने की अनुशंसा की जाती है। वहां एक सेवा बनाने का यह सबसे अच्छा अभ्यास है।
// src/Acme/FooBundle/DependencyInjection/AcmeFooExtension.php
<?php
namespace Acme\FooBundle\DependencyInjection;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
class AcmeFooExtension extends Extension
{
/**
* this method loads the Service Container services.
*/
public function load(array $configs, ContainerBuilder $container)
{
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
// load the src/Acme/FooBundle/Resources/config/services.xml file
$loader->load('services.xml');
}
<!-- src/Acme/FooBundle/Resources/config/services.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<!-- Loads the \Foo class as a acme_foo.foo service -->
<service id="acme_foo.foo"
class="\Foo"
></service>
</services>
</container>
: उदाहरण के लिए, यदि आपका वर्ग है
Foo
आप एक
Acme\FooBundle
जो
Foo
सेवा लोड हो जाता है बनाने
सिम्फनी स्वयं विक्रेताओं फ़ोल्डर में तीसरे पक्ष के पुस्तकालयों को स्टोर करता है। good practice आपकी तीसरी पार्टी कक्षा को भी
यदि आपको नहीं पता कि यह कैसे करना है, तो शायद this question मदद करेगा।
मुझे विश्वास है कि सेवा कंटेनर का उपयोग करना एक अच्छा अभ्यास होगा। वैसे भी, सेवा कंटेनर तीसरे पक्ष के डिप्टीेंसी को स्टोर करने और ढीले युग्मन को बचाने के लिए बनाया गया है।
docs देखें, वहां लिखा गया है कि क्यों और क्यों सेवा कंटेनर का उपयोग किया जाना चाहिए।
शुभकामनाएं।