টুইগ টেমপ্লেটে বর্তমান ইউআরএল পাবেন?


169

আমি একটি টুইগ টেমপ্লেটে বর্তমান পাথটি পেতে কোডটির সন্ধান করলাম (এবং সম্পূর্ণ ইউআরএল নয়), আমি চাই না http://www.sitename.com/page, আমার কেবল প্রয়োজন /page


11
এটি একটি সঠিক সদৃশ নয়, কারণ উত্তর # 2 এ লিঙ্কযুক্ত প্রশ্নটি সরবরাহ করে না এমন প্রয়োজনীয় তথ্য (অনুরোধের পরামিতিগুলি সম্পর্কে) রয়েছে। উত্তর লিঙ্কিত প্রশ্নের সাথে একটিটি মার্জ করা উচিত।
ভিক্টর সার্জিইঙ্কো

1
app.request.requestUri ব্যবহার করে দেখুন।
ক্রিস্টফ ডম্বি

7
মোটেও দুপ নয়। পুনরায় খুলতে ভোট। আমার উত্তরটি মন্তব্য হিসাবে পোস্ট করা হচ্ছে কারণ আমাকে এখনই উত্তর দেওয়ার অনুমতি নেই ... {{ app.request.getBaseUrl ~ app.request.getPathInfo }}( getBaseUrlকিছুটা
alচ্ছিক

উত্তর:


250
{{ path(app.request.attributes.get('_route'),
     app.request.attributes.get('_route_params')) }}

যদি আপনি এটিকে কোনও ভিউ ভেরিয়েবলের মধ্যে পড়তে চান:

{% set currentPath = path(app.request.attributes.get('_route'),
                       app.request.attributes.get('_route_params')) %}

appবিশ্বব্যাপী দৃশ্য পরিবর্তনশীল যেমন দরকারী শর্টকাট, সমস্ত প্রকারের রয়েছে app.sessionএবং app.security.token.userযে পরিষেবা আপনি একটি নিয়ামক ব্যবহার পারে উল্লেখ না করেন।


9
দুর্ভাগ্যক্রমে, আপনার যদি বাধ্যতামূলক পরামিতিগুলির সাথে কোনও রাস্তা থাকে তবে এটি কাজ করবে না।
মার্টিন শোহফুß

আপনি যদি সিম্ফনি ছাড়াই টুইগ ব্যবহার করছেন তবে আপনি এর মতো কিছু করতে পারেন: $ দ্বিগুণ-> অ্যাডগ্লোবাল ("কারেন্টুআরল", $ _SERVER ["REQUEST_URI"]);
গেটকিলার

1
যদি আপনার রুটে বাধ্যতামূলক প্যারামিটার থাকে তবে নীচের উত্তরটি দেখুন
স্যাম

@ গেটকিলার এটি আমার কার্যকরী পরীক্ষাকে ব্যর্থ করেছে:Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
রবিন

একটি দুর্দান্ত উত্তরের জন্য ধন্যবাদ, খুব সহায়ক!
ওয়াহে শাদুন্টস

199

পান বর্তমান URL : {{ app.request.uri }}Symfony 2.3, 3, 4, 5


কেবল পাথ পান : {{ app.request.pathinfo }}(পরামিতি ছাড়াই)


অনুরোধ uri পান : {{ app.request.requesturi }}(পরামিতি সহ)


1
এটিই আমার পক্ষে কাজ করেছে। অন্যরা সমস্ত ক্যোয়ারী প্যারামিটারগুলি মিস করেছে যেগুলি রুটের অংশ ছিল না, বা কন্ট্রোলারের উপর নির্ভর করেছিল এবং টুইগের পরিবর্তে।
ক্রেগ

13
পাথটি পেতে কেবল চেষ্টা করুন {{ app.request.pathinfo }}বা উপলভ্য পদ্ধতির তালিকা দেখুন/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
মাইকেল

2
এটি সঠিক উত্তর হওয়া উচিত। সংক্ষিপ্ত এবং মসৃণ।
ফ্যাবিয়ান পিকন

2
uriপ্যারামিটার সহ ইউআরএল পায়। কোনও পরামিতি pathinfoসহ পাথ পায় । পরামিতিগুলির সাথে পাথ পায় । এই উত্তর আইএমওতে যুক্ত করা উচিত। আপনার খুব কমই ডোমেনের প্রয়োজন হবে এবং আপনি খুব কমই পরামিতিগুলি সরাতে চাইবেন। requestUrirequestUri
rybo111

115

সিমফনি ২.১ এ আপনি এটি ব্যবহার করতে পারেন:

{{ path(app.request.attributes.get('_route'), 
        app.request.attributes.get('_route_params')) }}

সিমফনি ২.০-তে, একটি সমাধান হ'ল এটির জন্য একটি দ্বৈত প্রসারণ লিখুন

public function getFunctions()
{
    return array(
        'my_router_params' => new \Twig_Function_Method($this, 'routerParams'),
    );
}

/**
 * Emulating the symfony 2.1.x $request->attributes->get('_route_params') feature.
 * Code based on PagerfantaBundle's twig extension.
 */
public function routerParams()
{
    $router = $this->container->get('router');
    $request = $this->container->get('request');

    $routeName = $request->attributes->get('_route');
    $routeParams = $request->query->all();
    foreach ($router->getRouteCollection()->get($routeName)->compile()->getVariables() as $variable) {
        $routeParams[$variable] = $request->attributes->get($variable);
    }

    return $routeParams;
}

এবং এই মত ব্যবহার করুন

{{ path(app.request.attributes.get('_route'), my_router_params()|merge({'additional': 'value'}) }}

পেজারের মতো আপনার লিঙ্কগুলিতে অতিরিক্ত পরামিতি যুক্ত করতে না চাইলে বা প্যারামিটারগুলির মধ্যে একটি পরিবর্তন করতে না চাইলে আপনার এই সমস্ত কিছুই লাগবে না।


11
আপনি যদি টুইগের বর্তমান লিঙ্কটি উত্পন্ন করতে এবং ভাষা পরিবর্তনের জন্য লোকেল পরিবর্তন করতে চান তবে সিমফনি ২.১ এ নিম্নলিখিতভাবে করা যেতে পারে: {{পাথ (app.request.attributes.get ('_ রুট'), app.request.attributes .get (_ route_params ') | একত্রীকরণ ({_ লোকেল': 'জাপানী ভাষায়'}))}} এটা যদি আপনি Bártfai Tamás দ্বারা পল্লব এক্সটেনশান ব্যবহার কাজ করতে পারে
Naytzyrhc

আপনার 2.0 বাস্তবায়নের জন্য, আমি বলছিলাম যে কোনও ধারক নেই an সুতরাং আমি ভেরিয়েবলটি পেজফ্রান্তবান্ডলে যেমন করা হয়েছে তবুও এটি বলছে যে আমাকে কনটেইনারইন্টারফেসটি প্রয়োগ করতে হবে?
স্কোয়াজিক

আপনাকে এই এক্সটেনশনের জন্য একটি কনস্ট্রাক্টর তৈরি করতে হবে, যার একটি $ ধারক প্যারামিটার রয়েছে। তারপরে ডিআইসি কনফিগারেশনে আপনাকে ধারকটিকে প্রসারণের প্যারামিটার হিসাবে ঘোষণা করতে হবে। টুইগবান্ডলে এখানে পছন্দ করুন
বার্টফাই ট্যামেস

12
আপনার জিজ্ঞাসার স্ট্রিংয়ে অতিরিক্ত কিছু প্যারাম থাকলে _route_paraters কাজ করবে না। আপনি তার পরিবর্তে app.request.query.all ব্যবহার করতে পারেন।
wdev

34

আপনি টুইগের মতো বর্তমান ইউআরএলটি পেতে পারেন:

{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}

20

এটি লক্ষ করা উচিত যে আপনার ইউআরএলগুলিতে অতিরিক্ত ক্যোয়ারী প্যারামিটার থাকলে, যা নয় কনফিগার করা রুটের অংশ , স্বীকৃত উত্তরগুলি সেগুলিকে বর্তমান ইউআরএল (পাথ) এ অন্তর্ভুক্ত করবে না।

আপনি কেন অতিরিক্ত পরামিতি চান?

উদাহরণস্বরূপ, যদি আপনার কাছে রেকর্ড সহ একটি তালিকা পৃষ্ঠা থাকে যা কীওয়ার্ড দ্বারা ফিল্টার করা যায় এবং পৃষ্ঠাতে পৃষ্ঠা রয়েছে, সম্ভবত "কীওয়ার্ড" এবং "পৃষ্ঠা" এর জন্য ক্যোয়ারী ভেরিয়েবলগুলি আপনার রুটে থাকবে না। পেজিংয়ের জন্য আপনার ফরোয়ার্ড এবং পিছনের বোতামগুলিতে আপনার সম্পূর্ণ বর্তমান ইউআরএল প্রয়োজন (এতে কীওয়ার্ড রয়েছে যাতে পরবর্তী পৃষ্ঠাটি এখনও ফিল্টার করা হয়)। এবং আপনার পৃষ্ঠা পরিবর্তনশীল পরিবর্তন করতে হবে।

কীভাবে অতিরিক্ত ক্যোয়ারী প্যারামিটারগুলিতে মার্জ করবেন

সুতরাং আপনি বর্তমান রুটটি পেতে এবং অতিরিক্ত ভেরিয়েবলগুলিতে একীভূত করতে পারেন (এই অতিরিক্ত ভেরিয়েবলগুলির মধ্যে এক বা একাধিক সংশোধন করার পরে)। নোট করুন যে আপনি নিজের ভেরিয়েবলগুলিতে app.request.query.allমার্জ করছেন এবং তারপরে সেই অ্যারেটি মার্জ করে app.request.attributes.get('_route_params')path()পদ্ধতি প্রয়োজন যে আপনি রুট, যা তুমি কেন অন্তর্ভুক্ত করতে হবে এর সমস্ত প্রয়োজনীয় পরামিতি প্রদান _route_params

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}

এটি সত্যিই কুৎসিত, তবে আপনি যদি পৃষ্ঠাগুলি বিকাশ করছেন তবে আপনার পৃথক লিঙ্কে পৃষ্ঠা পরিবর্তনশীলটি পরিবর্তন করতে হবে, তাই আপনাকে প্রতিবার পুরো জিনিসটি অন্তর্ভুক্ত করতে হবে। সম্ভবত অন্যদের আরও ভাল সমাধান আছে।


2
সম্ভবত হওয়া উচিত{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
এফডিস্ক

2

আপনি যদি সাইলেক্স 2 ব্যবহার করছেন তবে আপনি আর অনুরোধের বস্তুটিতে আর অ্যাক্সেস করতে পারবেন না।

আপনি বর্তমান অনুরোধ বৈশিষ্ট্যগুলি এভাবে অ্যাক্সেস করতে পারেন।

app.request_stack.currentrequest.attributes.get('_route')

এবং সম্পূর্ণ বর্তমান URL উত্পন্ন করতে: path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))


আপনি পল্লব / Silex 2 ভালো বর্তমান URL টি পেতে পারেন: global.request.attributes.get('_route')টুইগ ব্রিজ দরকার।
ডিএসমস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.