在symfony中以表单扩展名获取当前网址是否有任何解决方案?
我发现了this link,但还不够清楚。
例如,我的网址是“ someurl / customer / update / 1”
所以我需要获取此URL,或者至少需要在该URL中获取 customer_id =“ 1” 。
感谢阅读,祝您有愉快的一天
编辑1:
我正在尝试使用 requestStack 解决方案,并出现以下错误:
函数的参数太少 MyCode \ Bundle \ CustomerBundle \ Form \ Extension \ AdminCustomerUserUpdateTypeExtension :: __ construct(), 0传入 /home/www/g2/directo/var/cache/dev/ContainerXjfz6hz/getForm_ExtensionService.php 在第1502行,预期恰好为1
这是我的代码:
MyCode \ Bundle \ CustomerBundle \ Form \ Extension \ AdminCustomerUserUpdateTypeExtension
class AdminCustomerUserUpdateTypeExtension extends AbstractTypeExtension
{
protected $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
/**
* {@inheritDoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$request = $this->requestStack->getCurrentRequest();
var_dump($request); exit;
}
}
services.yml
directo.form.extension.admin_customer_user_update_extension:
class: Directo\Bundle\CustomerBundle\Form\Extension\AdminCustomerUserUpdateTypeExtension
tags:
- { name: form.type_extension, extended_type: 'Oro\Bundle\CustomerBundle\Form\Type\CustomerUserType' }
我认为必须使用一些参数来调用 services.yml
例如:
directo.form.extension.admin_customer_user_update_extension:
class: Directo\Bundle\CustomerBundle\Form\Extension\AdminCustomerUserUpdateTypeExtension
arguments:
- '@oro_customer_user.manager'
tags:
- { name: form.type_extension, extended_type: 'Oro\Bundle\CustomerBundle\Form\Type\CustomerUserType' }
我可以知道需要输入哪些参数吗?谢谢。
答案 0 :(得分:1)
像这样将RequestStack
注入您的表单类型:
protected $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
要获取当前请求,您可以使用以下代码:
$request = $this->requestStack->getCurrentRequest();
您可以在symfony文档中阅读有关它的更多信息: https://symfony.com/doc/current/service_container/request.html
答案 1 :(得分:1)
您引荐的链接说您可以将表单扩展定义为服务,如下所示:
self.mapView.animate(toBearing: CLLocationDirection((self.getHeadingForDirection(fromCoordinate: self.pickUpMarker.position, toCoordinate: self.dropOffMarker.position) + 100) ))
通过该定义,您可以向服务中注入# config/services.yaml
services:
App\Form\Extension\SampleTypeExtension:
tags:
- { name: form.type_extension }
。
否:如果您正在使用自动装配启用,则不需要通过它 作为您服务中的一个论据。如果没有,您应该通过它。
示例表单扩展名:
RequestStack
您可以使用namespace App\Form\Extension;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\HttpFoundation\RequestStack;
class SampleTypeExtension extends AbstractTypeExtension
{
/** @var RequestStack */
private $requestStack;
public function __construct(RequestStack $requestStack) {
$this->requestStack = $requestStack;
}
}
随心所欲。
祝你好运。
答案 2 :(得分:0)
我将获得路由名称,而不是URL,它更可靠,您将能够更轻松地处理许多条件。
控制器
public function newAction(Request $request, ExtraFunctionService $extraFunction) {
$route=$request->attributes->get('_route');
$form=$this->createForm(UtilisateurType::class, $utilisateur, array(
'action'=>$this->generateUrl($route),
'method'=>'POST',
'data_route'=>$route, //Send route information to form
));
}
FormType
public function buildForm(FormBuilderInterface $builder, array $options) {
$dataRoute=$option['data_route'];
$builder->add();
if($dataRoute == 'route_name_a')) {
$builder->add();
} else if($dataRoute == 'route_name_b') {
$builder->add();
} else if($dataRoute == 'route_name_c') {
$builder->add();
}
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'data_class'=>'AppBundle\Entity\EntityName',
'data_route'=>null, //Set default to null in case param is not passed
));
}