সিমফনি 2- এ আমি কীভাবে বর্তমান রুটটি পাব ?
উদাহরণস্বরূপ routing.yml
:
somePage:
pattern: /page/
defaults: { _controller: "AcmeBundle:Test:index" }
আমি কীভাবে এই somePage
মূল্য পেতে পারি ?
সিমফনি 2- এ আমি কীভাবে বর্তমান রুটটি পাব ?
উদাহরণস্বরূপ routing.yml
:
somePage:
pattern: /page/
defaults: { _controller: "AcmeBundle:Test:index" }
আমি কীভাবে এই somePage
মূল্য পেতে পারি ?
উত্তর:
কনটেইনারওয়ালা (নিয়ন্ত্রকের মতো) এমন কিছু থেকে:
$request = $this->container->get('request');
$routeName = $request->get('_route');
টুইগ সহ: {{ app.request.attributes.get('_route') }}
<body class="{{ app.request.get('_route') | replace({'_' : '-'}) }}">
পৃষ্ঠা-নির্দিষ্ট সিএসএস প্রয়োগের জন্য আমি ব্যবহার করছি :)
আমি মনে করি এটি এটি করার সবচেয়ে সহজ উপায়:
class MyController extends Controller
{
public function myAction($_route)
{
var_dump($_route);
}
.....
{% render "SomeBundle:SomeController:someAction" %}
, যেখানে আপনি আবার '_ আন্তঃ' মান পাবেন।
সিমফনি ২.০-২.১ এটি
ব্যবহার করুন:
$router = $this->get("router");
$route = $router->match($this->getRequest()->getPathInfo());
var_dump($route['_route']);
সে আপনাকে দেবে না_internal
।
সিমফনি ২.২++ এর জন্য আপডেট: এটি সিমফনি ২.২+ শুরু করে কাজ করছে না। আমি একটি বাগ খুললাম এবং উত্তরটি ছিল "ডিজাইনের মাধ্যমে"। আপনি যদি কোনও সাব-অ্যাকশনে রুটটি পেতে চান তবে আপনাকে অবশ্যই এটি যুক্তি হিসাবে পাস করতে হবে
{{ render(controller('YourBundle:Menu:menu', { '_locale': app.request.locale, 'route': app.request.attributes.get('_route') } )) }}
এবং আপনার নিয়ামক:
public function menuAction($route) { ... }
$route['_route']
সমস্যাযুক্ত বলে মনে হচ্ছে তবে এটি সিমফনি দেবের আলোচনায় নাও থাকতে পারে। পাকপ্রণালীর সম্পর্কে উল্লেখ না _route
এর $router->match()
আউটপুট ..
$router->match()
" @ পুনর্বার অ্যারে" প্যারামিটারগুলির একটি অ্যারে "বলেছেন যা খুব অভ্যন্তরীণ বলে মনে হয় । আমি এটির উপর নির্ভর করতে চাই না, তবে এই মুহূর্তে, সাব-অনুরোধগুলি মোকাবেলা করার সময় এটি কেবলমাত্র একটি কার্যকর সমাধান বলে মনে হচ্ছে।
কোনও ব্যবহার নেই যা সমস্ত ব্যবহারের ক্ষেত্রে কার্যকর হয়। আপনি যদি $ অনুরোধ-> পান ('_ রুট') পদ্ধতি বা এর রূপগুলি ব্যবহার করেন তবে যেসব ফরোয়ার্ডিং হয়েছিল সেখানে এটি '_ আন্তঃআ' ফিরিয়ে দেবে ।
যদি আপনার এমন কোনও সমাধানের প্রয়োজন হয় যা ফরওয়ার্ডিংয়ের সাথেও কাজ করে তবে আপনাকে নতুন রিকোয়েস্টস্ট্যাক পরিষেবাটি ব্যবহার করতে হবে, এটি ২.৪ এ পৌঁছেছে, তবে এটি ESI সমর্থনটি ভঙ্গ করবে :
$requestStack = $container->get('request_stack');
$masterRequest = $requestStack->getMasterRequest(); // this is the call that breaks ESI
if ($masterRequest) {
echo $masterRequest->attributes->get('_route');
}
টেম্পলেটগুলিতে এটির প্রয়োজন হলে আপনি এটি থেকে একটি দ্বিগুণ প্রসার বাড়িয়ে নিতে পারেন।
_route
যাওয়ার উপায় নয় এবং কখনও ছিল না । এটি সর্বদা সিম্ফনি তৈরির ফ্যাবিয়েনের মতে ডিবাগিংয়ের উদ্দেশ্যে করা হয়েছিল। এটি অবিশ্বস্ত কারণ এটি আংশিক রেন্ডারিংয়ের মতো নিয়ন্ত্রণকারীদের কাছে ফরোয়ার্ডিং এবং অন্যান্য প্রত্যক্ষ কলগুলির মতো জিনিসগুলির সাথে কাজ করবে না।
আপনার নিয়ামকটিতে আপনাকে নিজের রুটের নামটি প্যারামিটার হিসাবে ইনজেকশনের প্রয়োজন, দস্তাবেজটি এখানে দেখুন
এছাড়াও, দয়া করে $request->get('');
আপনার যদি প্রয়োজন সুনির্দিষ্ট সম্পত্তি ব্যাগটি ব্যবহারের চেয়ে ধীরে ধীরে ধীরে ধীরে নমনীয়তা না প্রয়োজন তবে এটি ব্যবহার করুন (বৈশিষ্ট্য, ক্যোয়ারী বা অনুরোধ) সুতরাং এক্ষেত্রে $request->attributes->get('_route');
।
$request->attributes->get('_route');
আপনি নিয়ামকের মধ্যে থেকে অনুরোধ অবজেক্ট থেকে রুটের নামটি পেতে পারেন।
আমি যে সব পেয়ে যাচ্ছি
_internal
আমি $this->getRequest()->get('_route').
এমনকি নিয়ন্ত্রকের অভ্যন্তর থেকে রুটের নামটি পেয়েছি এমনকি কোডটি টেক্সডো 25 প্রস্তাবিত রিটার্ন দেয়_internal
এই কোডটি সিমফোনি 1. এক্স-তে 'উপাদান' বলা হয়ে কার্যকর করা হয়; কোনও পৃষ্ঠার নিয়ামক নয় তবে একটি পৃষ্ঠার অংশ যাতে কিছু যুক্তি প্রয়োজন।
সিমফনি ১. এক্স এর সমমানের কোডটি হ'ল: sfContext::getInstance()->getRouting()->getCurrentRouteName();
$view['request']->getParameter('_route');
{% render... %}
কলগুলি ব্যবহার করছেন standalone=true
। _internal
স্বতন্ত্রভাবে ক্যাশেযোগ্য হওয়ার জন্য ক্যাচিংয়ের সাথে (অ্যাপক্যাশ.এফপি বা ইএসআই সহ বার্নিশ) সক্ষম হয়ে পৃথক এইচটিটিপি-রিকোয়েস্টের (এটি যেখানে এই পথটি কার্যকর হয়) দিয়ে স্বতন্ত্র মতামতের জন্য অনুরোধ জানাবে।
সিমফনি ৩.৩ দিয়ে আমি এই পদ্ধতিটি ব্যবহার করেছি এবং ভাল কাজ করছি।
আমার মতো 4 টি রুট রয়েছে
প্রশাসক_শ্রেণী_পরিচালনা, প্রশাসক_শ্রেণী_ডিটেল, প্রশাসক_শ্রেণী_ক্রেট
এবং মাত্র একটি লাইন সমস্ত রুটের জন্য একটি সক্রিয় শ্রেণি তৈরি করে।
<li {% if app.request.get('_route') starts with 'admin_category' %} class="active"{% endif %}>
<a href="{{ path('admin_category_index') }}">Product Categoires</a>
</li>
ইউআরএল ভিত্তিক বর্তমান রুট পেতে (ফরোয়ার্ড ক্ষেত্রে আরও নির্ভরযোগ্য):
public function getCurrentRoute(Request $request)
{
$pathInfo = $request->getPathInfo();
$routeParams = $this->router->match($pathInfo);
$routeName = $routeParams['_route'];
if (substr($routeName, 0, 1) === '_') {
return;
}
unset($routeParams['_route']);
$data = [
'name' => $routeName,
'params' => $routeParams,
];
return $data;
}
সিমফনি ৪.২..7 এর সাহায্যে আমি আমার টুইগ টেম্পলেটটিতে নিম্নলিখিতগুলি প্রয়োগ করতে সক্ষম হয়েছি, যা আমার নিয়ামক (গুলি) এ সংজ্ঞায়িত কাস্টম রুটের নামটি প্রদর্শন করে।
ইনডেক্স। Html.twig এ
<div class="col">
{% set current_path = app.request.get('_route') %}
{{ current_path }}
</div>
আমার নিয়ামক
...
class ArticleController extends AbstractController {
/**
* @Route("/", name="article_list")
* @Method({"GET"})
*/
public function index() {
...
}
...
}
ফলাফলটি আমার ব্রাউজারে পছন্দসই পৃষ্ঠায় "নিবন্ধ_লিস্ট" মুদ্রণ করে।
সিমফনি 3 এর জন্য যে কারওও বর্তমান রুটের প্রয়োজন, আমি এটি ব্যবহার করি
<?php
$request = $this->container->get('router.request_context');
//Assuming you are on user registration page like https://www.yoursite.com/user/registration
$scheme = $request->getScheme(); //This will return https
$host = $request->getHost(); // This will return www.yoursite.com
$route = $request->getPathInfo(); // This will return user/registration(don't forget this is registrationAction in userController
$name = $request->get('_route'); // This will return the name.
?>
আপনি যদি অনুরোধটি ইনজেক্ট করার চেয়ে আপনার নিয়ামকটিতে রুটের নাম পেতে চান ( সিমফনি ইউপগ্রিডের কারণে ধারক থেকে আসার পরিবর্তে এবং কল গেট ('_ রুট') থেকে)।
public function indexAction(Request $request)
{
$routeName = $request->get('_route');
}
আপনি যদি রাস্তার নামটি দ্বিগুণে পেতে চান তবে এটির মতো করে নিতে হবে
{{ app.request.attributes.get('_route') }}
$request->get()
কারণ এটা ধীর এর সরাসরি github.com/symfony/http-foundation/blob/2.8/Request.php#L712