Symfony प्रोजेक्ट बनाना और चलाना
ServBay macOS के लिए विकसित एक स्थानीय वेब डेवेलपमेंट वातावरण है, जिसमें PHP, Node.js, Python, Go, Java जैसी बहु-भाषा रनटाइम्स और MySQL, PostgreSQL, MongoDB, Redis जैसी डेटाबेस सेवाएँ एकीकृत हैं, साथ ही Apache और Caddy वेब सर्वरस को भी सपोर्ट करता है। यह गाइड बताएगा कि macOS पर ServBay की मदद से तेज़ी से Symfony प्रोजेक्ट कैसे बनाएं और चलाएँ।
Symfony क्या है?
Symfony SensioLabs द्वारा विकसित एक ओपन सोर्स PHP वेब फ्रेमवर्क है, जिसका उद्देश्य डेवेलपर्स को मॉडर्न वेब ऐप और API बनाने के लिए एक शक्तिशाली, लचीला और कुशल उपकरणों का सेट प्रदान करना है। यह वेब के सर्वोत्तम मानकों का पालन करता है और रूटिंग, टेम्पलेटिंग (Twig), फ़ॉर्म प्रोसेसिंग, ऑथेंटिकेशन, डिपेंडेंसी इंजेक्शन जैसी कई खास सुविधाएँ देता है, जो आम वेब डेवेलपमेंट कार्यों को सरल बनाती हैं।
Symfony की मुख्य विशेषताएँ और फायदे
- मॉड्यूलर डिज़ाइन: Symfony एक पुन: प्रयोज्य कंपोनेंट्स की लाइब्रेरी है, जिससे डेवेलपर्स अपनी जरूरत के कंपोनेंट चुन सकते हैं—यह छोटे से लेकर बड़े ऐप तक के लिए उपयुक्त है।
- उच्च प्रदर्शन: अनुकूलित आर्किटेक्चर, तेज़ कैशिंग और PHP की नवीनतम क्षमताओं के कारण Symfony बेहतरीन प्रदर्शन देता है।
- मजबूत समुदाय: विशाल डेवलपर कम्युनिटी, ढेर सारे थर्ड-पार्टी बंडल (प्लगइन) और व्यापक डॉक्युमेंटेशन—समस्याओं का समाधान आसानी से मिलता है।
- लचीलापन: यह कई बाहरी लाइब्रेरी के साथ आसानी से इंटीग्रेट हो जाता है, जिससे यह विभिन्न स्तर के प्रोजेक्ट्स के लिए सर्वोत्तम है।
- स्थिरता और रखरखाव: अच्छी कोडिंग और डिजाइन प्रैक्टिस को फॉलो करता है, जिससे बना ऐप स्थिर, टेस्ट करने में आसान और विस्तार योग्य रहता है।
Symfony का उपयोग छोटे API से लेकर एंटरप्राइज़ लेवल के बड़े वेब प्रोजेक्ट्स तक के लिए किया जाता है।
ServBay के साथ Symfony प्रोजेक्ट बनाना और चलाना
ServBay Symfony प्रोजेक्ट को चलाने के लिए संपूर्ण वातावरण (PHP वर्शन, Composer, वेब सर्वर, विभिन्न डाटाबेस और कैशिंग सेवाएँ) उपलब्ध कराता है। इस सेक्शन में बताए गए कदमों का पालन कर आप नया Symfony प्रोजेक्ट बना और कॉन्फ़िगर कर सकते हैं।
आवश्यकताएँ
शुरू करने से पहले ये तैयारियाँ पूरी कर लें:
- ServBay इंस्टॉल करें: अपने macOS सिस्टम पर ServBay सफलतापूर्वक इंस्टॉल कर और शुरू कर लें। अगर इंस्टॉल नहीं किया है, ServBay इंस्टॉलेशन गाइड देखें।
- ServBay सुचारू रूप से चले: ServBay की मुख्य सेवाएँ (Caddy/Apache, जरुरी डाटाबेस) चल रही हों।
- बुनियादी जानकारी: PHP, Composer और Symfony की प्रारंभिक समझ हो।
Symfony प्रोजेक्ट बनाएँ
ServBay सुझाव देता है कि आपके सभी वेबसाइट प्रोजेक्ट /Applications/ServBay/www
डायरेक्टरी में रहे, जिससे वे आसानी से पहचाने और मैनेज किए जा सकें।
Composer उपलब्धता जांचें
ServBay इंस्टॉल करते समय Composer पहले से एकीकृत और PATH में सेट होता है, अलग से इंस्टॉलेशन की जरूरत नहीं। ये जांचने के लिए टर्मिनल में टाइप करें:
composer --version
प्रोजेक्ट डायरेक्टरी बनाएं
वेबसाइट रूट डायरेक्टरी में नया डायरेक्टरी बनाएं:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app
1
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
खोलें जिसमें जैसे DB कनेक्शन, ऐप सीक्रेट की सहित अन्य सेटिंग्स होती हैं। जरूरत के मुताबिक संपादित या जोड़ें।सुनिश्चित करें कि ये सेटिंग्स आपके ServBay वातावरण के हिसाब से हो:
dotenv# .env उदाहरण APP_ENV=dev # डेवलपमेंट वातावरण APP_SECRET=your_secret_key # यहां यूनिक और रैंडम स्ट्रिंग डालें (सुरक्षा हेतु) # डाटाबेस कनेक्शन का उदाहरण (आगे विस्तार से) # DATABASE_URL="mysql://db_user:[email protected]:3306/db_name?serverVersion=8.0&charset=utf8mb4" # DATABASE_URL="postgresql://db_user:[email protected]: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 में डिफ़ॉल्ट DB यूज़रroot
और पासवर्डpassword
होता है (प्रोडक्शन में इनको बदलना बहुत जरूरी है)। उदाहरण DB नामservbay_symfony_app
रखें।
वेब सर्वर (ServBay वेबसाइट) कॉन्फ़िगर करें
ब्राउज़र में Symfony ऐप ऐक्सेस करने के लिए ServBay में एक “वेबसाइट” (वर्चुअल होस्ट) सेटअप करें। Symfony का वेब रूट प्रोजेक्ट के public/
डायरेक्टरी में होता है।
ServBay कंट्रोल पैनल खोलें, "वेबसाइट" सेटिंग में जाकर नया वेबसाइट जोड़ें:
- नाम: वेबसाइट का परिचित नाम दें, जैसे
My Symfony Dev Site
। - डोमेन: एक लोकल डेवेलपमेंट डोमेन दें, उदाहरण:
servbay-symfony-test.local
। ServBay इसे स्थानीय रूप से मैप कर देगा। - वेबसाइट प्रकार:
PHP
चुनें। - PHP वर्ज़न: Symfony के लिए संगत PHP वर्ज़न चुनें, आमतौर पर नया (जैसे
8.3
) चुनें। - वेबसाइट रूट: प्रोजेक्ट के
public/
फोल्डर तक पथ दें -/Applications/ServBay/www/servbay-symfony-app/public
कॉन्फ़िगरेशन के बाद सेव कर के लागू कर दें। ServBay वेब सर्वर कॉन्फ़िगरेशन अपने-आप अपडेट कर देगा। यह Caddy या Apache दोनों के साथ चलता है और आपके लोकल डोमेन के लिए SSL सर्टिफिकेट भी ऑटोमैटिक बना देता है, ताकि आप HTTPS से सुरक्षित ऐक्सेस कर सकें।
पूरा सेटअप देखने के लिए ServBay में पहली वेबसाइट जोड़ना पेज देखें।
बेसिक उदाहरण कोड जोड़ना
वेबसाइट लॉडिंग जांचने के लिए एक सिंपल रूट और कंट्रोलर जोड़ेँ, जिससे मुख्य पृष्ठ पर एक टेक्स्ट बाहर आएगा।
रूट कॉन्फ़िगर करें (
config/routes.yaml
)config/routes.yaml
खोलें और मुख्य पथ/
के लिए रूट जोड़ें जोindex
नाम के कंट्रोलर को पॉइंट करे:yaml# config/routes.yaml index: path: / controller: App\Controller\DefaultController::index
1
2
3
4कंट्रोलर बनाएं (
src/Controller/DefaultController.php
)src/Controller/
डायरेक्टरी में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 का इस्तेमाल रिलेशनल डाटाबेस के लिए, तथा Symfony Cache कंपोनेंट का कैशिंग और NoSQL (Redis/Memcached) के लिए करता है। ServBay इन सब के PHP एक्सटेंशन सहित सेवाएं उपलब्ध कराता है।
रिलेशनल डाटाबेस उदाहरण (Doctrine ORM)
ServBay MySQL और PostgreSQL दोनों सपोर्ट करता है। नीचे दोनों को कैसे सेटअप करें, बताया गया है।
डेटाबेस कनेक्शन सेट करें
.env
फाइल में आवश्यक डाटाबेस केDATABASE_URL
की लाइन अन-कमेंट और सेट करें:- MySQL के लिए: डिफ़ॉल्ट यूजर:
root
, पासवर्ड:password
, पोर्ट:3306
dotenv# .env DATABASE_URL="mysql://root:[email protected]:3306/servbay_symfony_app?serverVersion=8.0&charset=utf8mb4"
1
2 - PostgreSQL के लिए: डिफ़ॉल्ट यूजर:
root
, पासवर्ड:password
, पोर्ट:5432
dotenv# .env DATABASE_URL="postgresql://root:[email protected]:5432/servbay_symfony_app?serverVersion=13&charset=utf8"
1
2
ServBay कंट्रोल पैनल में वांछित डाटाबेस सर्विस शुरू करना न भूलें।
- MySQL के लिए: डिफ़ॉल्ट यूजर:
डाटाबेस बनाएं
अगर
servbay_symfony_app
डाटाबेस नहीं है, तो आप ServBay के मैनेजमेंट टूल (phpMyAdmin/pgAdmin) से या Symfony कमांड से भी बना सकते हैं:bashphp bin/console doctrine:database:create
1Entity व Migration फाइलें बनाएं
Symfony में Doctrine Entity DB टेबल के लिए बनाई जाती है। Maker Bundle से Entity एवं Migration आसानी से जेनरेट करें।
- Entity बनाएँ (जैसे User):bashपूछे गए फील्ड जैसे
php bin/console make:entity User
1name
(string),email
(string, unique=yes) जोड़ें। - Migration बनाएँ:bashयह SQL स्कीमा वाली Migration फाइल बनाता है।
php bin/console make:migration
1
- Entity बनाएँ (जैसे User):
Migration चलाएँ
DB स्ट्रक्चर लागू करने के लिए रन करें:
bashphp bin/console doctrine:migrations:migrate
1डेटाबेस ऑपरेशन उदाहरण जोड़ें
src/Controller/DefaultController.php
में Database CRUD के उदाहरण हेतु कोड और रूटिंग जोड़ें। इसके लिएEntityManagerInterface
इंजेक्ट करें।सबसे पहले, कंट्रोलर के कन्स्ट्रक्टर में
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; // JsonResponse के लिए class DefaultController { private $entityManager; // DI के जरिये EntityManagerInstance प्राप्त करें public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } // ... अन्य methods ... }
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 निर्भर करता है किस DB का उपयोग है controller: App\Controller\DefaultController::addUser mysql_get_users: path: /mysql-users # या /pgsql-users controller: App\Controller\DefaultController::getUsers
1
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('[email protected]'); // ऑब्जेक्ट को परसिस्ट (DB में लिखने के लिए तयार) $this->entityManager->persist($user); // DB में सेव करें $this->entityManager->flush(); return new Response('User added successfully!'); } /** * @Route("/get-users", name="app_get_users") */ public function getUsers(): JsonResponse { // DB से सभी User लायें $users = $this->entityManager->getRepository(User::class)->findAll(); // Array में बदलें ताकि JsonResponse send कर सकें $usersArray = []; foreach ($users as $user) { $usersArray[] = [ 'id' => $user->getId(), 'name' => $user->getName(), 'email' => $user->getEmail(), ]; } // JSON response लौटायें 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
खोलें—यह एक यूजर DB में जोड़ेगा।https://servbay-symfony-test.local/get-users
खोलें—सभी यूजर्स की JSON लिस्ट देख सकते हैं।
कैश और NoSQL डाटाबेस उदाहरण (Symfony Cache)
ServBay में Redis और Memcached के सर्विस व PHP एक्सटेंशन बिल्ट-इन होते हैं, जिन्हें आप Symfony Cache Component के माध्यम से अपने प्रोजेक्ट में इस्तेमाल कर सकते हैं।
कैश कनेक्शन कॉन्फ़िगर करें
.env
में कैश सर्वर सेटिंग्स जोड़ें।- Memcached के लिए: डिफ़ॉल्ट पोर्ट
11211
है।dotenvसुनिश्चित करें Memcached सेवा चालू हो।# .env # ... अन्य सेटिंग ... CACHE_DSN=memcached://127.0.0.1:11211
1
2
3 - Redis के लिए: डिफ़ॉल्ट पोर्ट
6379
है।dotenvRedis सर्विस चालू करना न भूलें।# .env # ... अन्य सेटिंग ... CACHE_DSN=redis://127.0.0.1:6379 # अगर Redis पासवर्ड प्रोटेक्टेड है (डिफ़ॉल्ट नहीं), तो # CACHE_DSN=redis://:[email protected]:6379
1
2
3
4
5
- Memcached के लिए: डिफ़ॉल्ट पोर्ट
कैश संचालन का उदाहरण जोड़ें
src/Controller/DefaultController.php
में CacheInterface इंजेक्ट कर कैश संचालन जोड़ें।सबसे पहले कन्स्ट्रक्टर में 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; } // ... अन्य methods ... }
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::cacheExample
1
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; } // ... अन्य methods ... /** * @Route("/cache-example", name="app_cache_example") */ public function cacheExample(): Response { // कैश से डेटा प्राप्त करने का प्रयास करें $cacheItem = $this->cache->get('my_symfony_cache_key', function (ItemInterface $item) { // अगर कैश नहीं मिला, तो यह ब्लॉक चलेगा $item->expiresAfter(3600); // कैश वैधता 1 घंटा // मान लें कोई समय-साध्य काम जैसे DB क्वेरी $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
खोलें। पहली बार डेटा बनेगा और सेव होगा, बाद में जब तक कैश वैध रहेगा, वही सीधे लौटेगा।
सामान्य प्रश्न (FAQ)
Q: मैं https://servbay-symfony-test.local
खोलता हूँ, पेज नहीं मिलता या 500 एरर देता है?
A: ये जाँचें:
- ServBay चल रहा है तथा वेबसाइट सेवा (Caddy/Apache) भी।
- वेबसाइट सेटअप में डोमेन
servbay-symfony-test.local
व "वेबसाइट रूट"/Applications/ServBay/www/servbay-symfony-app/public
सही है। - Symfony के लॉग (
var/log/dev.log
) देखें। - प्रोजेक्ट डायरेक्टरी में
composer install
चलाकर डिपेंडेंसियाँ पूरी करें। - PHP वर्शन Symfony के साथ संगत है या नहीं।
Q: डाटाबेस कनेक्शन फेल हो जाता है, क्या करें?
A: ये उपाय करें:
- DB सेवा चालू है (MySQL या PostgreSQL)।
.env
मेंDATABASE_URL
के डिटेल्स (यूजर, पासवर्ड, होस्ट, पोर्ट, DB नाम) सही हैं।- DB यूजर और पासवर्ड, ServBay के डिफ़ॉल्ट या बदलकर इस्तेमाल किया हो।
- कार्यरत डाटाबेस
servbay_symfony_app
मौजूद है।
Q: php bin/console
कमांड नहीं चलती?
A: टर्मिनल में मौजूदा डायरेक्टरी /Applications/ServBay/www/servbay-symfony-app
है और ServBay का PHP सही PATH में है (इंस्टॉल के वक्त Usually सेट हो जाता है)। टर्मिनल में which php
करके देखें कि ServBay का PHP यूज़ हो रहा है।
निष्कर्ष
इस गाइड के माध्यम से आपने macOS और ServBay पर बेसिक Symfony प्रोजेक्ट बनाना, सेटअप और चलाना सीख लिया। ServBay Symfony डेवलपमेंट के लिए जरूरी सभी चीजें (PHP, Composer, Web Server, डाटाबेस, कैश) बहुत ही सहज तरीके से देता है, जिससे आप तुरन्त व्यवहारिक एप्लिकेशन कोडिंग के लिए तैयार हो जाते हैं। अब आप इस बेसिक प्रोजेक्ट से Symfony की और एडवांस फीचर्स सीख सकते हैं, और ServBay की अन्य सर्विसेज का भी लाभ उठा सकते हैं।