Symfony प्रोजेक्ट बनाएँ और चलाएँ
ServBay एक स्थानीय वेब डिवेलपमेंट एनवायरनमेंट है, जो खास तौर से macOS और Windows के लिए डिज़ाइन किया गया है। इसमें PHP, Node.js, Python, Go, Java समेत कई रनटाइम्स और MySQL, PostgreSQL, MongoDB, Redis जैसे डेटाबेस एकीकृत हैं, और यह Apache व Caddy वेब सर्वर को सपोर्ट करता है। यह गाइड आपको विस्तार से बताएगी कि ServBay का उपयोग करके macOS और Windows पर किस तरह त्वरित रूप से Symfony प्रोजेक्ट सेटअप और चला सकते हैं।
Symfony क्या है?
Symfony SensioLabs द्वारा विकसित एक ओपन सोर्स PHP वेब फ्रेमवर्क है, जिसका उद्देश्य डिवेलपर्स को आधुनिक वेब एप्लीकेशन और API बनाने के लिए एक शक्तिशाली, लचीला और सुविधाजनक टूलसेट देना है। इसमें रूटिंग, टेम्पलेट इंजन (Twig), फॉर्म हैंडलिंग, ऑथेंटिकेशन, डिपेंडेंसी इंजेक्शन जैसे कंपोनेंट्स शामिल हैं, जो आम वेब डिवेलपमेंट कार्य को काफी आसान बना देते हैं।
Symfony की खासियतें और लाभ
- मोड्यूलर डिज़ाइन: Symfony का कोर फिर-यूज़ेबल कंपोनेंट्स पर आधारित है, आप अपनी ज़रूरत के हिसाब से कंपोनेंट्स चुन सकते हैं।
- उच्च प्रदर्शन: अनुकूल भवन और कैशिंग की वजह से, साथ ही PHP की नवीनतम तकनीकों के समर्थन के कारण Symfony का प्रदर्शन बेहतरीन है।
- मजबूत समुदाय समर्थन: बड़े डेवलपर समुदाय, ढेर सारे third-party Bundles (प्लगइन) और विस्तृत डॉक्यूमेंटेशन की वजह से समस्या आने पर हल ढूंढना आसान है।
- लचीलापन: तृतीय-पक्ष लाइब्रेरी और एक्सटेंशन को आसानी से इंटीग्रेट किया जा सकता है, छोटे API से लेकर बड़े एंटरप्राइज़ सिस्टम तक।
- स्थिरता और रखरखाव: अच्छा कोडिंग स्टैंडर्ड और डिज़ाइन पैटर्न फॉलो करता है, जिससे एप्लीकेशन को भरपूर टेस्ट, मेंटेन और एक्सटेंड किया जा सकता है।
Symfony छोटे API से ले कर बड़े एंटरप्राइज वेब प्रोजेक्ट्स के लिए परफेक्ट है।
ServBay द्वारा Symfony प्रोजेक्ट बनाना और चलाना
ServBay Symfony के लिए संपूर्ण वातावरण मुहैया करता है—PHP वर्शन, Composer, वेब सर्वर,डाटाबेस और कैशिंग सपोर्ट। इस सेक्शन में आप जानेंगे कि ServBay की क्षमताओं का उपयोग कर एक नया Symfony प्रोजेक्ट कैसे बनाएं और कॉन्फ़िगर करें।
आवश्यकताएँ
शुरू करने से पहले कृपया निम्न चीजें सुनिश्चित करें:
- ServBay इंस्टॉल करें: आपने अपने macOS पर ServBay को सफलतापूर्वक इंस्टॉल और शुरू कर लिया है। अगर नहीं किया है तो ServBay इंस्टॉलेशन गाइड देखें।
- ServBay सही ढंग से चल रहा हो: ServBay के आवश्यक सर्विसेज, जैसे Caddy या Apache और डाटाबेस, सक्रिय हैं।
- बुनियादी जानकारी: PHP, Composer और Symfony की मूल अवधारणाओं की प्राथमिक समझ हो।
Symfony प्रोजेक्ट बनाएँ
ServBay अनुशंसा करता है कि अपने सभी वेबसाइट प्रोजेक्ट /Applications/ServBay/www डायरेक्टरी में रखें ताकि प्रोजेक्ट मैनेजमेंट आसान हो।
Composer की उपलब्धता जांचें
ServBay Composer के साथ आता है, और उसे चलाने के लिए कोई अतिरिक्त इंस्टॉलेशन नहीं चाहिए। टर्मिनल में
composer --versionलिखकर Composer की उपलब्धता जांच सकते हैं।प्रोजेक्ट डायरेक्टरी बनाएं
अनुशंसित वेबसाइट रूट में एक नई डायरेक्टरी बनाएं:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app1
2Composer से Symfony प्रोजेक्ट बनाएँ
बनायी डायरेक्टरी में जाएँ और Composer से
website-skeletonआधारित Symfony प्रोजेक्ट बनाएं:bashcd /Applications/ServBay/www/servbay-symfony-app composer create-project symfony/website-skeleton .1
2इस कमांड से Composer Symfony के मुख्य फाइलें और डिपेंडेंसीज़ डाउनलोड कर लेगा।
प्रारंभिक कॉन्फ़िगरेशन
Symfony में मुख्य सेटिंग्स पर्यावरणीय वेरिएबल्स (.env) से होती हैं जो प्रोजेक्ट रूट के .env फाइल में सेव होती हैं।
पर्यावरणीय वेरिएबल्स (.env) कॉन्फ़िगर करें
प्रोजेक्ट रूट में
.envफाइल खोलें और अपना सेटअप के अनुसार कॉन्फ़िगरेशन एडजस्ट करें।निम्नलिखित कंफिगurations ServBay के अनुसार सेट या एडजस्ट करें:
dotenv# .env फाइल उदाहरण APP_ENV=dev # डेवलपमेंट एनवायरनमेंट APP_SECRET=your_secret_key # सिक्योरिटी के लिए एक यूनिक रेंडम स्ट्रिंग डालेँ # डाटाबेस कनेक्शन उदाहरण (MySQL उदाहरण, अन्य बाद में बताएँगे) # DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=8.0&charset=utf8mb4" # DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=13&charset=utf8" # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"1
2
3
4
5
6
7
8your_secret_keyको एक सुरक्षित रेंडम स्ट्रिंग से रिप्लेस करें। डाटाबेस के लिए, ServBay की डिफॉल्ट यूजरrootऔर पासवर्डpasswordहोता है (प्रोडक्शन में कभी इन्हें ना रखें)। उदाहरण में डाटाबेस नामservbay_symfony_appरखा है।
वेब सर्वर (ServBay Website) कॉन्फ़िगर करें
ब्राउज़र से Symfony प्रोजेक्ट देखने के लिए ServBay की "Website" फीचर द्वारा एक लोकल वर्चुअल होस्ट बनाना होगा। Symfony का वेब रूट प्रोजेक्ट के public/ डायरेक्टरी में होता है।
ServBay कंट्रोल पैनल खोलें, "Website" या पुराने वर्शन में "Host Setting" में जाएँ, नया वेबसाइट सेटअप करें:
- नाम (Name): वेबसाइट को एक पहचानने योग्य नाम दें, जैसे
My Symfony Dev Site - डोमेन (Domain): लोकल डेवलपमेंट के लिए एक डोमेन सेट करें, जैसे
servbay-symfony-test.local - वेबसाइट टाइप (Website Type):
PHPचुनें - PHP वर्शन (PHP Version): Symfony संगत PHP वर्शन चुनें, जैसे
8.3 - वेबसाइट रूट डाइरेक्टरी (Website Root): Symfony के लिए रूट
/Applications/ServBay/www/servbay-symfony-app/publicरखें
सेटिंग सेव करें और लागू करें। ServBay वेब सर्वर कॉन्फ़िगरेशन ऑटोमेटिकली अपडेट कर देता है। ServBay आपके लोकल डोमेन के लिए SSL सर्टिफिकेट भी बना कर ट्रस्ट कर देता है—सीधे HTTPS से ऐक्सेस करें।
विस्तृत स्टेप्स के लिए देखें: ServBay में पहली वेबसाइट जोड़ें
बेसिक उदाहरण कोड ऐड करें
वेबसाइट की सेटिंग के सफल होने की जांच के लिए सिंपल रूट और कंट्रोलर बनाएं ताकि वेबसाइट के रूट पाथ पर टेक्स्ट आउटपुट दिखे।
रूट कॉन्फ़िगर करें (
config/routes.yaml)config/routes.yamlमें रूट/कोindexकंट्रोलर का टारगेट बनाएं:yaml# config/routes.yaml index: path: / controller: App\Controller\DefaultController::index1
2
3
4कंट्रोलर बनाएँ (
src/Controller/DefaultController.php)src/Controller/में नया PHP फाइलDefaultController.phpबनाएँ:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class DefaultController { /** * @Route("/", name="index") */ public function index(): Response { // एक बेसिक HTTP रिस्पॉन्स लौटाएँ return new Response('Hello ServBay and Symfony!'); } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18यह क्लास
DefaultControllerऔर उसमेंindexमेथड बनाता है, जो रूट/को "Hello ServBay and Symfony!" टेक्स्ट देती है।
वेबसाइट एक्सेस करें
अब अपने ब्राउज़र में https://servbay-symfony-test.local खोलें। अगर सब सही सेट हुआ है तो आपको दिखेगा:
Hello ServBay and Symfony!1
यह साबित करता है कि आपका Symfony प्रोजेक्ट ServBay वेब सर्वर पर सफलतापूर्वक चल रहा है। ServBay HTTPS ऑटो सेट करता है, इसलिए हमेशा https:// का उपयोग करें।
डाटाबेस और कैश उदाहरण
Symfony द्वारा रिलेशनल डाटाबेस (Doctrine ORM) और NoSQL/कैश (Symfony Cache) सपोर्ट मिलता है। ServBay में कई डाटाबेस और PHP एक्सटेंशन है—Simple इंटीग्रेशन सम्भव है।
रिलेशनल डाटाबेस उदाहरण (Doctrine ORM)
ServBay MySQL और PostgreSQL सपोर्ट करता है। यहाँ दोनों के कॉन्फ़िग्रेशन और उपयोग का तरीका है:
डाटाबेस कनेक्शन सैट करें
.envफाइल में, अपने सर्वर अनुसार आवश्यकDATABASE_URLकॉन्फ़िगर करें।- MySQL के लिए: यूजर
root, पासवर्डpassword, पोर्ट3306dotenv# .env DATABASE_URL="mysql://root:password@127.0.0.1:3306/servbay_symfony_app?serverVersion=8.0&charset=utf8mb4"1
2 - PostgreSQL के लिए: यूजर
root, पासवर्डpassword, पोर्ट5432dotenv# .env DATABASE_URL="postgresql://root:password@127.0.0.1:5432/servbay_symfony_app?serverVersion=13&charset=utf8"1
2
ServBay कंट्रोल पैनल में सम्बंधित डाटाबेस (MySQL या PostgreSQL) सर्विस को स्टार्ट करें।
- MySQL के लिए: यूजर
डाटाबेस बनाएँ
यदि
servbay_symfony_appडाटाबेस नहीं है, तो ServBay के डाटाबेस टूल (जैसे phpMyAdmin या pgAdmin) से बना सकते हैं या Symfony कमांड:bashphp bin/console doctrine:database:create1Entity और Migration फाइल बनाएँ
Doctrine Entity डाटाबेस टेबल को रिप्रेज़ेंट करता है और Maker Bundle से आसानी से जनरेट किए जा सकते हैं।
- Entity बनाएँ (
User):bashप्रॉम्प्ट पर फील्ड्स जैसेphp bin/console make:entity User1name(string) औरemail(string, unique=yes) डालें। - Migration फाइल बनाएँ:bashSQL स्टेटमेंट के साथ
php bin/console make:migration1src/Migrationsमें नया फाइल बनेगा।
- Entity बनाएँ (
माइग्रेशन चलाएँ
डाटाबेस में स्ट्रक्चर अप्लाई करें:
bashphp bin/console doctrine:migrations:migrate1डाटाबेस ऑपरेशन उदाहरण जोड़ें
src/Controller/DefaultController.phpमें नया रूट और मेथड जोड़ें, Doctrine से डाटा लिखें और पढ़ें।EntityManagerInterfaceको Inject करें।सबसे पहले, कंस्ट्रक्टर में EntityManagerInterface ऐड करें:
php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; // EntityManagerInterface इम्पोर्ट करें use App\Entity\User; // User Entity इम्पोर्ट करें use Symfony\Component\HttpFoundation\JsonResponse; // JSON रिस्पॉन्स के लिए class DefaultController { private $entityManager; // डिपेंडेंसी इंजेक्शन द्वारा EntityManagerInterface लें public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } // ... अन्य मेथड्स ... }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30अब
config/routes.yamlमें नए रूट जोड़ें:yaml# config/routes.yaml # ... अन्य रूट्स ... mysql_add_user: path: /mysql-add-user # या /pgsql-add-user जैसा कि आपका डाटाबेस हो controller: App\Controller\DefaultController::addUser mysql_get_users: path: /mysql-users # या /pgsql-users controller: App\Controller\DefaultController::getUsers1
2
3
4
5
6
7
8फिर कंट्रोलर में मेथड्स एड करें:
php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; // JsonResponse इम्पोर्ट करें class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } /** * @Route("/add-user", name="app_add_user") */ public function addUser(): Response { $user = new User(); // ServBay ब्रांडिंग से संबंधित उदाहरण डाटा $user->setName('ServBay Demo User'); $user->setEmail('demo-user@servbay.test'); // ऑब्जेक्ट को पर्सिस्ट करें (लिखने लिए तैयार) $this->entityManager->persist($user); // लिखें ऑपरेशन को निष्पादित करें $this->entityManager->flush(); return new Response('User added successfully!'); } /** * @Route("/get-users", name="app_get_users") */ public function getUsers(): JsonResponse { // डाटाबेस से सभी User Entity लाएं $users = $this->entityManager->getRepository(User::class)->findAll(); // JsonResponse के लिए Array बनाएं $usersArray = []; foreach ($users as $user) { $usersArray[] = [ 'id' => $user->getId(), 'name' => $user->getName(), 'email' => $user->getEmail(), ]; } // JSON फॉर्मेट में रिस्पॉन्स लौटाएँ return new JsonResponse($usersArray); } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67उदाहरण एक्सेस करें
https://servbay-symfony-test.local/add-userखोलकर यूजर जोड़ें।https://servbay-symfony-test.local/get-usersपर जोड़े गए यूजर्स देखें (JSON फॉर्मेट में)।
कैश और NoSQL उदाहरण (Symfony Cache)
ServBay में Redis और Memcached सर्विसज़ तथा उनके PHP एक्सटेंशन हैं; Symfony Cache का इस्तेमाल कर ये सर्विसेज आसानी से उपयोग में लाई जा सकती हैं।
कैश कनेक्शन सेट करें
.envफाइल में कैश कनेक्शन सेट करें।- Memcached के लिए: पोर्ट
11211है।dotenvServBay कंट्रोल पैनल में Memcached सर्विस स्टार्ट करें।# .env # ... अन्य सेटिंग्स ... CACHE_DSN=memcached://127.0.0.1:112111
2
3 - Redis के लिए: पोर्ट
6379है।dotenvServBay कंट्रोल पैनल में Redis सर्विस स्टार्ट करें।# .env # ... अन्य सेटिंग्स ... CACHE_DSN=redis://127.0.0.1:6379 # पासवर्ड वाले Redis (डिफॉल्ट में पासवर्ड नहीं है): # CACHE_DSN=redis://:your_password@127.0.0.1:63791
2
3
4
5
- Memcached के लिए: पोर्ट
कैश उदाहरण ऐड करें
src/Controller/DefaultController.phpमें नया रूट और मेथड जोड़ें, Symfony Cache और Memcached/Redis सपोर्ट। कंस्ट्रक्टर मेंCacheInterfaceInject करें।सबसे पहले CacheInterface इस्तेमाल करें:
php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Contracts\Cache\CacheInterface; // CacheInterface इम्पोर्ट करें class DefaultController { private $entityManager; private $cache; // cache प्रॉपर्टी ऐड करें // कंस्ट्रक्टर में CacheInterface डालें public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; // सेट करें } // ... अन्य मेथड ... }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25अब
config/routes.yamlमें नया रूट जोड़ें:yaml# config/routes.yaml # ... अन्य रूट्स ... cache_example: path: /cache-example controller: App\Controller\DefaultController::cacheExample1
2
3
4
5कंट्रोलर में कैश उदाहरण मेथड ऐड करें:
php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Contracts\Cache\CacheInterface; use Symfony\Component\Cache\Item\ItemInterface; // ItemInterface इम्पोर्ट करें class DefaultController { private $entityManager; private $cache; public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; } // ... अन्य मेथड ... /** * @Route("/cache-example", name="app_cache_example") */ public function cacheExample(): Response { // कैश से डाटा लाने की कोशिश करें $cacheItem = $this->cache->get('my_symfony_cache_key', function (ItemInterface $item) { // मिस हो तो callback चलेगा $item->expiresAfter(3600); // 1 घंटे वैलिडिटी // किसी भारी ऑपरेशन का उदाहरण, जैसे डाटाबेस से डाटा लाना $data = "Data generated at " . date('Y-m-d H:i:s'); // कैश में डाला डाटा लौटाएँ return $data; }); // $cacheItem अब कैश या नया डाटा है $output = "From Cache: " . $cacheItem; return new Response($output); } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48उदाहरण देखें
- ब्राउज़र में
https://servbay-symfony-test.local/cache-exampleखोलें। पहली बार callback चलेगा, फिर Cache से डाटा मिलेगा जब तक expiry ना हो।
- ब्राउज़र में
सामान्य सवाल (FAQ)
प्रश्न: अगर https://servbay-symfony-test.local खोलने पर पेज नहीं मिलता या 500 एरर आता है तो?
उत्तर:
- सुनिश्चित करें कि ServBay और वेबसाइट सर्विस (Caddy या Apache) चल रही हो।
- ServBay वेबसाइट कॉन्फिग में डोमेन
servbay-symfony-test.localसही प्रकार सेट हो और वेबसाइट रूट/Applications/ServBay/www/servbay-symfony-app/publicहो। - Symfony के लॉग फाइल (
var/log/dev.log) देखें। - प्रोजेक्ट रूट पर
composer installचलाकर डिपेंडेंसीज़ इंस्टाल करें। - PHP वर्शन प्रोजेक्ट से संगत हो।
प्रश्न: डाटाबेस कनेक्शन में दिक्कत हो तो?
उत्तर:
- ServBay में सम्बंधित डाटाबेस सर्विस (MySQL या PostgreSQL) एक्टिव हो।
.envमेंDATABASE_URLपूरी सही हो, जैसे यूजर, पासवर्ड, होस्ट, पोर्ट और डाटाबेस नाम।- डाटाबेस यूजर/पासवर्ड ServBay की डिफॉल्ट या आपके अनुसार हों।
- डाटाबेस
servbay_symfony_appमौजूद हो।
प्रश्न: php bin/console अगर नहीं चल रहा तो?
उत्तर:
- टर्मिनल में वर्तमान डायरेक्टरी
/Applications/ServBay/www/servbay-symfony-appहो। - ServBay PHP सिस्टम PATH में सही तरह सेट हो (अक्सर इंस्टॉल के समय ऑटोमेटिक होता है)।
which phpसे चेक करें कि ServBay PHP ही उपयोग हो रहा है।
साक्षात्कार
इस गाइड के माध्यम से आपने ServBay का उपयोग कर macOS पर एक बेसिक Symfony प्रोजेक्ट बनाना, कॉन्फ़िगर करना और चलाना सीख लिया। ServBay Symfony के लिए आवश्यक सभी मुख्य घटक (PHP, Composer, वेब सर्वर, डाटाबेस, कैशिंग) उपलब्ध कराता है और सेटअप को बेहद आसान बनाता है, जिससे आप जल्दी से डिवेलपमेंट पर ध्यान दे सकें। इस बेसिक प्रोजेक्ट के आधार पर आप Symfony की अन्य एडवांस सुविधाएँ सीख सकते हैं और ServBay के अन्य टूल्स और सर्विसेज का लाभ उठा सकते हैं।
