वेबसाइट के बेस यूआरएल को प्राप्त करना और विश्व स्तर पर इसे सिम्फनी 2 में ट्विग के लिए पास करना


89

मैं CodeIgniter से सिम्फनी 2 में स्विच कर रहा हूं। क्या कोई मुझे इसका उदाहरण दे सकता है:

  • आधार url प्राप्त करें (मार्ग विशिष्ट भागों के बिना url)
  • विश्व स्तर पर इस चर को टहनी बंडल में पास करें ताकि मैं इसे हर टेम्पलेट में उपयोग कर सकूं।

जवाबों:


92

आपको इस रूट url को प्राप्त करने की आवश्यकता क्यों है? क्या आप सीधे पूर्ण URL का निर्माण नहीं कर सकते?

{{ url('_demo_hello', { 'name': 'Thomas' }) }}

यह टहनी कोड पूर्ण http: // url से _demo_hello मार्ग उत्पन्न करेगा।

वास्तव में, वेबसाइट का आधार यूआरएल प्राप्त करना केवल मुखपृष्ठ मार्ग का पूर्ण यूआरएल प्राप्त करना है:

{{ url('homepage') }}

( मुखपृष्ठ , या जिसे आप अपनी रूटिंग फ़ाइल में कहते हैं)।


बहुत बहुत धन्यवाद, मैंने सोचा कि यह जाने का रास्ता था लेकिन मैं केवल {{पथ (..)}} फ़ंक्शन के बारे में जानता था, जिससे गलत परिणाम आए। {{url}} सिर्फ वही है जो मुझे चाहिए था।
ज्योफ्री डी व्यिलर

यदि मैं सिम्फनी कंसोल कमांड से टहनी प्रदान कर रहा हूं, तो ईमेल टेम्पलेट उत्पन्न करने के लिए मुझे आधार URL की आवश्यकता होगी। मैं उस मामले में कैसे करूं।
vishal

1
उसके लिए एक कुकबुक है: symfony.com/doc/master/cookbook/console/sending_emails.html
डेमियन

अगर मैं टहनी का उपयोग नहीं कर रहा हूं तो मैं इसे PHP में कैसे लिख सकता हूं ?
निस

1
काम नहीं कर रहा ExpressionParser.php: 574 स्टैक ट्रेस: ​​# 0
कमलेश

143

यह अब टहनी टेम्पलेट्स में मुफ्त में उपलब्ध है (sf2 संस्करण 2.0.14 पर परीक्षण किया गया)

{{ app.request.getBaseURL() }}

बाद के सिम्फनी संस्करणों (2.5 पर परीक्षण) में, कोशिश करें:

{{ app.request.getSchemeAndHttpHost() }}

36
यह भी छोटा किया जा सकता है {{ app.request.baseUrl }}(यह गटर विधि का पता लगाएगा और स्वचालित रूप से कॉल करेगा)
कॉलिन ओ'डेल

2
@Colin O'Dell इसके अलावा, यह देखने में विधि कॉल का उपयोग करने के लिए और भी अधिक उपयुक्त नहीं है - दृश्य को यह नहीं पता होना चाहिए कि ऑब्जेक्ट में क्या तरीके हैं। हालाँकि यह सिम्फनी में थोड़ा अलग दिखता है, लेकिन फिर भी उस जवाब के लिए +10 है।
थोरिनकर

1
अगर मैं टहनी का उपयोग नहीं कर रहा हूं तो मैं इसे PHP में कैसे लिख सकता हूं ?
निस

6
यह बाद के संस्करणों में काम नहीं करता है (sf 2.5 पर परीक्षण किया गया)। नीचे जवाब {{ app.request.getSchemeAndHttpHost() }}काम करता है!
RayOnAir


35

सिम्फनी 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) शामिल है।


34

बेस यूआरएल अंदर परिभाषित किया गया है Symfony\Component\Routing\RequestContext

इसे इस तरह कंट्रोलर से लाया जा सकता है:

$this->container->get('router')->getContext()->getBaseUrl()


16
 <base href="{{ app.request.getSchemeAndHttpHost() }}"/>

या नियंत्रक से

$this->container->get('router')->getContext()->getSchemeAndHttpHost()

3

इसके अलावा js / css / image urls के लिए आसान फंक्शन एसेट () है

<img src="{{ asset('image/logo.png') }}"/>

2
कृपया अपने उत्तर में कुछ और स्पष्टीकरण जोड़ें - क्या परिसंपत्ति सभी के बाद आधार का उपयोग करती है? मेरी परियोजनाओं में, यह सिर्फ एक रिश्तेदार यूआरएल
निको हेस

2

वैश्विक स्तर पर टेम्प्लेट में परिवर्तनशील चर के बजाय, आप एक बेस टेम्प्लेट को परिभाषित कर सकते हैं और उसमें 'वैश्विक भाग' को प्रस्तुत कर सकते हैं। आधार टेम्प्लेट विरासत में मिल सकता है।

सिम्फनी प्रलेखन से टेम्पलेट प्रदान करने का उदाहरण:

<div id="sidebar">
  {% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %}
</div>

2

वर्तमान सिम्फनी संस्करण के लिए (जैसा कि यह उत्तर सिम्फनी 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;
    }
}

वर्तमान अनुरोध ऑब्जेक्ट को पुनर्प्राप्त करने के तरीके के बारे में आधिकारिक सिम्फनी डॉक्स भी देखें ।



0

मल्टी-डोमेन एप्लिकेशन को शामिल करने वाली एक स्थिति में, app.request.getHttpHostमुझे मदद मिली। यह कुछ ऐसा देता है example.comया subdomain.example.com(या example.com:8000जब पोर्ट मानक नहीं है)। यह सिम्फनी 3.4 में था।


-1

मैंने यहां सभी विकल्पों की कोशिश की, लेकिन उन्होंने मेरे लिए काम नहीं किया। आखिरकार मुझे इसका इस्तेमाल करके काम करना पड़ा

{{ साईट यूआरएल }}

आशा है कि यह किसी ऐसे व्यक्ति की मदद करता है जो अभी भी संघर्ष कर रहा है।


यह कहां से आता है? क्या होता siteहै?
निको हासे

वह टिम्बर और वर्डप्रेस से है।
कॉन्सटेंटिनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.