खोज…
404 प्रतिसाद वापस करें
जब सर्वर पर कोई संसाधन नहीं मिलता है, तो 404 प्रतिक्रियाएं दी जाती हैं, सिम्फनी में यह स्थिति NotFoundHttpException
अपवाद को फेंककर बनाई जा सकती है। नियंत्रक के अंदर एक अतिरिक्त use
बयान से बचने के लिए Controller
वर्ग द्वारा प्रदान createNotFoundException()
उपयोग करें
<?php
namespace Bundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class TestController extends Controller
{
/**
* @Route("/{id}", name="test")
* Recommended to avoid template() as it has a lot of background processing.
* Query database for 'test' record with 'id' using param converters.
*/
public function testAction(Test $test)
{
if (!$test) {
throw $this->createNotFoundException('Test record not found.');
}
return $this->render('::Test/test.html.twig', array('test' => $test));
}
}
एकाधिक मार्गों
सिम्फनी में एक क्रिया के लिए कई मार्गों को परिभाषित करना संभव है। यह बहुत उपयोगी हो सकता है यदि आपके पास ऐसे कार्य हैं जो समान हैं लेकिन अलग-अलग पैरामीटर हैं।
class TestController extends Controller
{
/**
* @Route("/test1/{id}", name="test")
* @Route("/test2/{id}", name="test2")
* Here you can define multiple routes with multiple names
*/
public function testAction(Test $test)
{
if (!$test) {
throw $this->createNotFoundException('Test record not found.');
}
return $this->render('::Test/test.html.twig', array('test' => $test));
}
}
POST अनुरोध पुनर्निर्देशित
जब आप एक कंट्रोलरेशन में होते हैं और आपके पास एक POST रिक्वेस्ट आती है , लेकिन इसे पोस्ट रूट विधि और रिक्वेस्ट ऑब्जेक्ट को बनाए रखते हुए, इसे एक अलग रूट पर रीडायरेक्ट करना चाहते हैं, तो आप निम्न का उपयोग कर सकते हैं:
return $this->redirectToRoute('route', array(
'request' => $request,
), 307);
कोड 307 यहां अनुरोध विधि को संरक्षित करता है।
उपडोमेन-आधारित रूटिंग
host
पैरामीटर का उपयोग करके उपडोमेन-आधारित रूटिंग को सिम्फनी में संभाला जा सकता है। उदाहरण के लिए, _locale
पैरामीटर को उपडोमेन मान के रूप में उपयोग किया जा सकता है।
यह मानते हुए
locale: en
domain: somedomain.com
पैरामीटर पैरामीटर में परिभाषित किए गए parameters.yml
हाइमल कॉन्फ़िगरेशन फ़ाइल, मार्ग होगा:
/**
* @Route(
* "/",
* name="homepage",
* host="{_locale}.{domain}",
* defaults={"_locale" = "%locale%", "domain" = "%domain%"},
* requirements={"_locale" = "%locale%|de|fr", "domain" = "%domain%"}
* )
* @Route(
* "/",
* name="homepage_default",
* defaults={"_locale" = "%locale%"}
* )
*/
इस बिंदु से राउटर URI जैसे कि http://de.somedomain.com
को संभाल सकता है। दूसरा @Route
एनोटेशन डिफ़ॉल्ट लोकेल और शून्य सबडोमेन, http://somedomain.com
लिए एक @Route
रूप में इस्तेमाल किया जा सकता है।
अनुमार्गण मार्गों का उपयोग करते हुए
profile_user_profile:
path: /profile/{id}
defaults: { _controller: ProfileBundle:Profile:profile }
requirements:
id: \d+
methods: [get, delete]
यदि आप एनोटेशन के बजाय Routing.yml का उपयोग करने का निर्णय लेते हैं, तो आप सभी मार्गों को बेहतर तरीके से देख सकते हैं और एक को खोजना और खोजना आसान बना सकते हैं।
यह आप पर निर्भर है कि वह Routing.yml और एनोटेशन के बीच चुने । आप विभिन्न मार्गों के लिए दोनों का उपयोग कर सकते हैं लेकिन यह सबसे अच्छा समाधान नहीं है।
एनोटेशन @Route()
समतुल्य है:
class ProfileController extends Controller
{
/**
* @Route("/profile/{id}", name="profile_user_profile", requirements={"id": "\d+"})
* @Method("GET", "DELETE")
*/
public function profileAction($id)
{
if (!$id) {
throw $this->createNotFoundException('User not found.');
}
return $this->render('::Profile/profile.html.twig', array('id' => $id));
}
}