आप अपने फॉर्म प्रकार के निर्माता के माध्यम से router
सेवा पास कर सकते हैं। form.type
टैग के साथ अपने फॉर्म को सेवा के रूप में पंजीकृत करें और router
सेवा को इंजेक्ट करें।
<?php
namespace Vendor\Bundle\AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
class PostType extends AbstractType
{
/**
* @var Router
*/
private $router;
/**
* @param Router
*/
public function __construct(Router $router)
{
$this->router = $router;
}
/**
* @return string
*/
public function getName()
{
return 'post';
}
// ...
}
एक सेवा के रूप में यह रजिस्टर:
services:
form.type.post:
class: Vendor\Bundle\AppBundle\Form\Type\PostType
arguments: [ @router ]
tags:
- { name: form.type }
और इस तरह अपने नियंत्रक में उपयोग:
public function addAction(Request $request)
{
$post = new Post();
$form = $this->createForm('post', $post);
// ...
}
जब से तुम form.type
टैग के साथ एक सेवा के रूप में अपने प्रपत्र प्रकार पंजीकृत, आप बस new PostType()
के बजाय इसका नाम उपयोग कर सकते हैं। और आप router
सेवा को $this->router
पर अपने प्रकार में एक्सेस कर सकते हैं।
स्रोत
2012-03-26 12:16:28
क्या आप 'तर्क: [@router] 'के लिए php टेम्पलेट संस्करण कोड निर्दिष्ट कर सकते हैं? –
[इस अनुभाग] में PHP टैब देखें (http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services)। –