मैं CodeIgniter से सिम्फनी 2 में स्विच कर रहा हूं। क्या कोई मुझे इसका उदाहरण दे सकता है:
- आधार url प्राप्त करें (मार्ग विशिष्ट भागों के बिना url)
- विश्व स्तर पर इस चर को टहनी बंडल में पास करें ताकि मैं इसे हर टेम्पलेट में उपयोग कर सकूं।
मैं CodeIgniter से सिम्फनी 2 में स्विच कर रहा हूं। क्या कोई मुझे इसका उदाहरण दे सकता है:
जवाबों:
आपको इस रूट url को प्राप्त करने की आवश्यकता क्यों है? क्या आप सीधे पूर्ण URL का निर्माण नहीं कर सकते?
{{ url('_demo_hello', { 'name': 'Thomas' }) }}
यह टहनी कोड पूर्ण http: // url से _demo_hello मार्ग उत्पन्न करेगा।
वास्तव में, वेबसाइट का आधार यूआरएल प्राप्त करना केवल मुखपृष्ठ मार्ग का पूर्ण यूआरएल प्राप्त करना है:
{{ url('homepage') }}
( मुखपृष्ठ , या जिसे आप अपनी रूटिंग फ़ाइल में कहते हैं)।
यह अब टहनी टेम्पलेट्स में मुफ्त में उपलब्ध है (sf2 संस्करण 2.0.14 पर परीक्षण किया गया)
{{ app.request.getBaseURL() }}
बाद के सिम्फनी संस्करणों (2.5 पर परीक्षण) में, कोशिश करें:
{{ app.request.getSchemeAndHttpHost() }}
{{ app.request.baseUrl }}
(यह गटर विधि का पता लगाएगा और स्वचालित रूप से कॉल करेगा)
{{ app.request.getSchemeAndHttpHost() }}
काम करता है!
आप नए अनुरोध विधि का उपयोग कर सकते हैं getSchemeAndHttpHost()
:
{{ app.request.getSchemeAndHttpHost() }}
सिम्फनी v2.1 से v4.1 + के माध्यम से मान्य
यदि आप बेस URL को सिम्फनी एप्लिकेशन के लिए चाहते हैं, तो आपको राउटर पथ और क्वेरी स्ट्रिंग को छोड़कर, कैसे काम करता है, के समान getSchemeAndHttpHost()
एक साथ समसामयिक उपयोग करना चाहिए ।getBaseUrl()
getUri()
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
उदाहरण के लिए, यदि आपकी सिम्फनी वेबसाइट URL पर रहती है https://www.stackoverflow.com/app1/
, तो ये दो विधियाँ इन मानों को वापस करती हैं:
getSchemeAndHttpHost
https://www.stackoverflow.com
getBaseUrl
/app1
नोट: यदि आपके URL में यह getBaseUrl()
स्क्रिप्ट फ़ाइल नाम (यानी /app.php
) शामिल है।
बेस यूआरएल अंदर परिभाषित किया गया है Symfony\Component\Routing\RequestContext
।
इसे इस तरह कंट्रोलर से लाया जा सकता है:
$this->container->get('router')->getContext()->getBaseUrl()
सिम्फनी 2.3+ के लिए, एक नियंत्रक में बेस यूआरएल प्राप्त करने के लिए होना चाहिए
$this->get('request')->getSchemeAndHttpHost();
$this->container->get('request')->getSchemeAndHttpHost()
<base href="{{ app.request.getSchemeAndHttpHost() }}"/>
या नियंत्रक से
$this->container->get('router')->getContext()->getSchemeAndHttpHost()
वैश्विक स्तर पर टेम्प्लेट में परिवर्तनशील चर के बजाय, आप एक बेस टेम्प्लेट को परिभाषित कर सकते हैं और उसमें 'वैश्विक भाग' को प्रस्तुत कर सकते हैं। आधार टेम्प्लेट विरासत में मिल सकता है।
सिम्फनी प्रलेखन से टेम्पलेट प्रदान करने का उदाहरण:
<div id="sidebar">
{% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %}
</div>
वर्तमान सिम्फनी संस्करण के लिए (जैसा कि यह उत्तर सिम्फनी 4.1 है इस लेखन के रूप में) सीधे सेवा कंटेनर तक पहुंच नहीं है, जैसा कि कुछ अन्य उत्तरों में किया गया है।
इसके बजाय (जब तक आप मानक सेवाओं के कॉन्फ़िगरेशन का उपयोग नहीं करते हैं), टाइप-हिंटिंग द्वारा अनुरोध ऑब्जेक्ट को इंजेक्ट करें।
<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* The YourService class provides a method for retrieving the base URL.
*
* @package App\Service
*/
class YourService
{
/**
* @var string
*/
protected $baseUrl;
/**
* YourService constructor.
*
* @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
*/
public function __construct(RequestStack $requestStack)
{
$this->baseUrl = $requestStack->getCurrentRequest()->getSchemeAndHttpHost();
}
/**
* Returns the current base URL.
*
* @return string
*/
public function getBaseUrl(): string
{
return $this->baseUrl;
}
}
वर्तमान अनुरोध ऑब्जेक्ट को पुनर्प्राप्त करने के तरीके के बारे में आधिकारिक सिम्फनी डॉक्स भी देखें ।
{{ dump(app.request.server.get('DOCUMENT_ROOT')) }}
मैंने यहां सभी विकल्पों की कोशिश की, लेकिन उन्होंने मेरे लिए काम नहीं किया। आखिरकार मुझे इसका इस्तेमाल करके काम करना पड़ा
{{ साईट यूआरएल }}
आशा है कि यह किसी ऐसे व्यक्ति की मदद करता है जो अभी भी संघर्ष कर रहा है।
site
है?