खोज…
परिचय
सिम्फनी में एक नियंत्रक एक PHP कॉल करने योग्य (एक फ़ंक्शन, ऑब्जेक्ट पर एक विधि, या एक बंद) है जो एक HTTP अनुरोध प्राप्त करता है और एक HTTP प्रतिक्रिया देता है। एक HTTP प्रतिक्रिया में कुछ भी हो सकता है: एक HTML पृष्ठ, एक JSON स्ट्रिंग, एक फ़ाइल डाउनलोड, आदि।
सिम्फनी को बताने के लिए कि किस नियंत्रक को एक निश्चित अनुरोध को संभालना चाहिए, आपको एक मार्ग को कॉन्फ़िगर करने की आवश्यकता है।
वाक्य - विन्यास
- $ यह-> जेनरेट ('मार्ग_नाम', ['प्लेसहोल्डर' => 'मूल्य']); // एक प्लेसहोल्डर के साथ मार्ग के लिए
route_name
उत्पन्न करता है - $ This-> प्रस्तुत करना ( 'template.html.twig'); // एक Twig टेम्पलेट प्रदान करता है और एक रिस्पांस ऑब्जेक्ट देता है
- $ यह-> रेंडर ('टेम्पलेट.html.wig', ['पैरामीटर' => $ मूल्य]); // एक पैरामीटर के साथ एक टहनी टेम्पलेट प्रदान करता है
- $ इस फेंक -> createNotFoundException ('संदेश'); // एक NotFoundHttpException फेंकता है, जो सिम्फनी को 404 प्रतिक्रिया देने का कारण बनेगा
टिप्पणियों
नियंत्रकों को छोटा होना चाहिए और HTTP अनुरोधों को संभालने पर ध्यान केंद्रित करना चाहिए: आपके आवेदन के वास्तविक व्यापार तर्क को आपके डोमेन मॉडल के उदाहरण के लिए, आपके आवेदन के विभिन्न भागों में सौंप दिया जाना चाहिए।
एक साधारण नियंत्रक वर्ग
// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
class HelloWorldController
{
public function helloWorldAction()
{
return new Response(
'<html><body>Hello World!</body></html>'
);
}
}
एक टहनी टेम्पलेट का प्रतिपादन
अधिकांश समय, आप अपने नियंत्रक में HTML को हार्ड-कोड करने के बजाय टेम्पलेट से HTML प्रतिक्रियाओं को प्रस्तुत करना चाहेंगे। साथ ही, आपके टेम्प्लेट स्थिर नहीं होंगे, लेकिन एप्लिकेशन डेटा के लिए प्लेसहोल्डर होंगे। डिफ़ॉल्ट रूप से सिम्फनी ट्विग के साथ आती है, जो शक्तिशाली शक्तिशाली भाषा है।
अपने नियंत्रक में टहनी का उपयोग करने के लिए, सिम्फनी के आधार Controller
वर्ग का विस्तार करें:
// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class HelloWorldController extends Controller
{
public function helloWorldAction()
{
$text = 'Hello World!';
return $this->render('hello-world.html.twig', ['text' => $text]);
}
}
app/Resources/views/hello-world.html.twig
टेम्पलेट बनाएं ( app/Resources/views/hello-world.html.twig
):
<html><body>{{ text }}</body></html>
नियंत्रक द्वारा पारित text
पैरामीटर के मूल्य के साथ ट्विग स्वचालित रूप से {{ text }}
प्लेसहोल्डर को बदल देगा। यह निम्न HTML आउटपुट प्रस्तुत करेगा:
<html><body>Hello World!</body></html>
404 (नहीं मिला) पृष्ठ पर लौटना
कभी-कभी आप 404 (नहीं मिला) प्रतिक्रिया लौटना चाहते हैं, क्योंकि अनुरोधित संसाधन मौजूद नहीं है। सिम्फनी आपको NotFoundHttpException
को फेंककर ऐसा करने की अनुमति देता है।
सिम्फनी बेस कंट्रोलर एक createNotFoundException
मेथड को उजागर करता है जो आपके लिए अपवाद बनाता है:
public function indexAction()
{
// retrieve the object from database
$product = ...;
if (!$product) {
throw $this->createNotFoundException('The product does not exist');
}
// continue with the normal flow if no exception is thrown
return $this->render(...);
}
अनुरोध ऑब्जेक्ट से डेटा का उपयोग करना
यदि आपको Request
ऑब्जेक्ट (उदाहरण के लिए क्वेरी पैरामीटर पढ़ने के लिए, HTTP हेडर पढ़ने के लिए या अपलोड की गई फ़ाइल को संसाधित करने के लिए) तक पहुंचने की आवश्यकता है, तो आप टाइप-हिंटेड तर्क जोड़कर अनुरोध को विधि तर्क के रूप में प्राप्त कर सकते हैं:
use Symfony\Component\HttpFoundation\Request;
public function indexAction(Request $request)
{
$queryParam = $request->query->get('param');
// ...
}
सिम्फनी प्रकार के संकेत को पहचान लेगा और नियंत्रक कॉल में अनुरोध तर्क जोड़ देगा।