ওয়েবসাইটের বেস ইউআরএল পাওয়া এবং বিশ্বব্যাপী সিমফনি 2-তে এটি পাতলা করার জন্য to


92

আমি কোডইগনিটার থেকে সিমফনি ২ তে স্যুইচ করছি someone কেউ দয়া করে কীভাবে আমাকে একটি উদাহরণ দিতে পারেন:

  • বেস url পান (রুট নির্দিষ্ট অংশ ছাড়া url)
  • বিশ্বব্যাপী এই পরিবর্তনশীলটি টুইগ বান্ডেলে পাস করুন যাতে আমি এটি প্রতিটি টেমপ্লেটে ব্যবহার করতে পারি।

উত্তর:


91

এই রুট ইউআরএল কেন আপনার দরকার? আপনি কি সরাসরি পরম ইউআরএল তৈরি করতে পারবেন না?

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

এই টুইগ কোডটি _ ডেমো_হেলো রুটে পুরো http: // url তৈরি করবে।

আসলে, ওয়েবসাইটটির বেস ইউআরএল পাওয়া কেবল হোমপেজ রুটের পুরো url পাচ্ছে:

{{ url('homepage') }}

( হোমপেজ , বা আপনি যা কিছু বলছেন তা আপনার রাউটিং ফাইলটিতে)।


অনেক অনেক ধন্যবাদ, আমি ভেবেছিলাম এটিই যাওয়ার উপায় তবে আমি কেবল {{পথ (..)}} ফাংশন সম্পর্কে জানতাম যা ভুল ফলাফলের দিকে পরিচালিত করে। {{url} ঠিক আমার যা প্রয়োজন।
জিওফ্রে ডি ভিল্ডার

আমি যদি সাইমফনি কনসোল কমান্ড থেকে ডানাটি রেন্ডার করছি তবে ইমেল টেমপ্লেট তৈরি করতে বলতে পারি, আমার বেস ইউআরএল প্রয়োজন। এই ক্ষেত্রে আমি কীভাবে করব।
বিশাল

4
এর জন্য একটি কুকবুক রয়েছে: symfony.com/doc/master/cookbook/console/sending_emails.html
ড্যামিয়েন

আমি যদি ট্যুইগ ব্যবহার না করে থাকি তবে কীভাবে আমি পিএইচপিতে এটি আবার লিখতে পারি ?
নিস

4
কাজ করছে না ফ্যাটাল ত্রুটি: আনকডড টুইগ_এরআর_সিন্ট্যাক্স: জে: am xampp \ htdocs \ সাইটগুলি \ ওপেনকার্ট 3020 \ সিস্টেম \ লাইব্রেরি \ টেমপ্লেট \ টুইগ \ এক্সপ্রেশনপার্স.এফপি: 574 স্ট্যাক ট্রেস: # 0
কমলেশ

143

এটি এখন টুইগ টেম্পলেটগুলিতে বিনামূল্যে পাওয়া যায় (এসএফ 2 সংস্করণ 2.0.14 এ পরীক্ষিত)

{{ app.request.getBaseURL() }}

পরে সিমফনি সংস্করণগুলিতে (২.২-এ পরীক্ষিত) চেষ্টা করুন:

{{ app.request.getSchemeAndHttpHost() }}

36
এমনকি এটি সংক্ষিপ্তও করা যেতে পারে {{ app.request.baseUrl }}(এটি প্রাপ্তকারী পদ্ধতিটি সনাক্ত করবে এবং এটি স্বয়ংক্রিয়ভাবে কল হবে)
কলিন ও'ডেল

4
@ কলিন ওডেল তদ্ব্যতীত, পদ্ধতিতে কলগুলি ব্যবহারের জন্য এটি আরও বেশি কৃত্রিমভাবে গ্রহণযোগ্য নয় - দৃষ্টিভঙ্গিটি অবজেক্টে কী পদ্ধতিগুলি রয়েছে তা জেনে রাখা উচিত নয়। যদিও এটি সিম্ফনিতে কিছুটা পৃথক দেখাচ্ছে, তবে যাইহোক এই উত্তরটির জন্য +10।
থোরিঙ্কর

4
আমি যদি ট্যুইগ ব্যবহার না করে থাকি তবে কীভাবে আমি পিএইচপিতে এটি আবার লিখতে পারি ?
নিস

6
এটি পরবর্তী সংস্করণগুলিতে কাজ করে না (এসএফ 2.5 এ পরীক্ষিত)। নীচের উত্তর {{ app.request.getSchemeAndHttpHost() }}কাজ করে!
রায়অনেয়ার


37

সিমফনি v2.1 থেকে v4.1 + এর মাধ্যমে বৈধ

আপনি যদি সিম্ফনি অ্যাপ্লিকেশনটির বেস ইউআরএলটি চান তবে রাউটার পথ এবং ক্যোয়ারী স্ট্রিং ব্যতীত আপনার কাজটি কীভাবে হয় তার সমান আপনার getSchemeAndHttpHost()একসাথে একসাথে ব্যবহার করা উচিত ।getBaseUrl()getUri()

{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}

উদাহরণস্বরূপ, যদি আপনার সিমফোনির ওয়েবসাইট ইউআরএল থাকে https://www.stackoverflow.com/app1/ তবে এই দুটি পদ্ধতি এই মানগুলি ফিরিয়ে দেয়:

getSchemeAndHttpHost

https://www.stackoverflow.com

getBaseUrl

/app1

দ্রষ্টব্য: getBaseUrl()স্ক্রিপ্ট ফাইলের নাম অন্তর্ভুক্ত (যেমন /app.php) এটি যদি আপনার URL এ থাকে in


34

বেস url ভিতরে সংজ্ঞায়িত করা হয় Symfony\Component\Routing\RequestContext

এটি নিয়ামকের কাছ থেকে এটি এড়ানো যেতে পারে:

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



4

জেএস / সিএসএস / ইমেজ ইউআরএলগুলির জন্য হ্যান্ডি ফাংশন অ্যাসেট রয়েছে ()

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

4
দয়া করে আপনার উত্তরে আরও কিছু ব্যাখ্যা যুক্ত করুন - সম্পদ কি সর্বোপরি বেস ইউরাল ব্যবহার করে? আমার প্রকল্পগুলিতে, এটি কেবলমাত্র একটি সম্পর্কিত ইউআরএল প্রিন্ট করে
নিকো হেস

2

বিশ্বব্যাপী টেমপ্লেটে পরিবর্তনশীলটি পাস করার পরিবর্তে, আপনি একটি বেস টেম্পলেটটি সংজ্ঞায়িত করতে এবং এতে 'গ্লোবাল অংশ' রেন্ডার করতে পারেন। বেস টেমপ্লেট উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে।

সিমফনি ডকুমেন্টেশন থেকে রেকর্ডিং টেম্পলেট উদাহরণ:

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

2

বর্তমান সিমফনি সংস্করণের জন্য (এই উত্তরটি লেখার ক্ষেত্রে এটি সিমফনি ৪.১) অন্যান্য কয়েকটি উত্তরের মতো সরাসরি সার্ভিস ধারকটিতে প্রবেশ করবেন না।

পরিবর্তে (আপনি যদি স্ট্যান্ডার্ড পরিষেবাদি কনফিগারেশন ব্যবহার না করেন), টাইপ-হিন্টিং দ্বারা অনুরোধ অবজেক্টটি ইনজেক্ট করুন।

<?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যখন বন্দরটি মান নয়) এর মতো কিছু ফেরত দেয় । এটি সিমফোনিতে ৩.৪ ছিল।


0

সিমফনি 5 এবং একটি নিয়ামক পদ্ধতির সাধারণ পরিস্থিতিতে ইনজেকশনের অনুরোধ অবজেক্টটি ব্যবহার করুন :

public function controllerFunction(Request $request, LoggerInterface $logger)
  ...
  $scheme = $request->getSchemeAndHttpHost();
  $logger->info('Domain is: ' . $scheme);
  ...
  //prepare to render
  $retarray = array(
    ...
    'scheme' => $scheme,
    ...
    );
  return $this->render('Template.html.twig', $retarray);
}

-1

আমি এখানে সমস্ত অপশন চেষ্টা করেছিলাম কিন্তু তারা আমার পক্ষে কাজ করে নি। অবশেষে আমি এটি ব্যবহার করে কাজ পেয়েছিলাম

{{ সাইট URL টি }}

আশা করি এটি এমন কাউকে সহায়তা করে যা এখনও লড়াই করে চলেছে।


এটা কোথা থেকে আসে? কি siteথাকে?
নিকো হাজে

এটি টিম্বার এবং ওয়ার্ডপ্রেস থেকে এসেছে।
কনস্টান্টিনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.