使用Symfony 2,当我尝试传递参数/变量时出现此错误:
Controller "MyBundle\Controller\ManageController::updateAction()"
requires that you provide a value for the "$name" argument (because there is
no default value or because there is a non optional argument after this one).
这是实体/模型Parcs
:
namespace MyBundle\DatabaseBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Parcsimmobilier
*
* @ORM\Table(name="parcs")
* @ORM\Entity
*/
class Parcs
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=150, nullable=false)
*/
private $name;
首先,我有一个分支,它可以允许用户修改/更新Parc,我使用JavaScript允许html中的<code>select标签
{% block content %}
<div class="form-group">
<label class="control-label">Which Parcs would you like to update ?</label>
<form action="{{ path('UpdateParcs_form' , {'name':'parcs.name'}) }}" method="GET">
<select class="form-control" id="selectpicker">
<option disabled selected> select your parc </option>
{% for parcsimmobilier in parc %}
<option value="parc"><strong>{{ parcs.name}}</strong></option>
{% endfor %}
</select>
</form>
</div>
{% endblock %}
这是JavaScript代码,它允许我在选择显示更新表单的其他路由后重定向用户:
$(function() {
$('#selectpicker').change(function() {
this.form.submit();
});
});
现在,树枝向谁显示表单以更新所选parc:
{% block content %}
<form action="{{ path('updateParcs_process') }}" method="POST">
<div>
{{ form_label(form.name, "change the name of the parc", {'label_attr': {'class': 'control-label'}}) }}
<div>
{{ form_widget(form.name, {'attr': {'class': 'form-control'}}) }}
</div>
</div>
<input type="submit" value="Update" class="btn btn-success"/>
</form>
{% endblock %}
因此,当我在“更新”按钮上提交时,出现了错误:
控制器“my bundle \ Controller \ manage Controller::update action()”要求您为“$name”参数提供一个值(因为没有默认值,或者因为在这个值之后有一个非可选参数)。
这是我的控制器代码与更新操作:
public function updateAction($name) {
$em = $this->getDoctrine()->getManager();
$parc = $em->getRepository('MySpaceDatabaseBundle:Parcs')->find($name);
$form = $this->createForm(new ParcsType(), $parc);
$request = $this->get('request');
if ($request->isMethod('POST') | ($form->isValid())) {
$form->bind($request);
$parc = $form->getData();
$em->flush();
return $this->redirect($this->generateUrl('index_parcs'));
}
//retourner le formulaire d'ajout si c'est invalide
else {
return $this->render('MySpaceManageBundle:Parcs:updateParcs.html.twig', array('form' => $form->createView(), 'parc' => $parc, 'name' => $name));
}
}
这是我的路由的路由文件:
# index for management
index_Parcs:
path: /manageparcs
defaults: { _controller: MySpaceManageBundle:Manage:indexParcs }
requirements:
methods: GET
# route for display the form after the select choice
updateParcs_form:
path: /manageparcs/update/form/{name}
defaults: { _controller: MySpaceManageBundle:Manage:update }
requirements:
methods: GET
# route for processing form with update
updateParcs_process:
path: /manageparcs/update/form/success
defaults: { _controller: MySpaceManageBundle:Manage:update }
requirements:
methods: POST
我的问题是:为什么我会有这个错误?我怎么能修好它?如何使用此updateAction()正确更新实体/模型。如何在Symfony中通过路由传递参数。
除了在控制器中将< code>$nom作为参数,而在路由配置中将< code>name作为参数之外,您做的事情是正确的。根据其他文件,只需更改配置即可:
将< code>routing.yml中的< code>name更改为< code>nom:
updateParcs_form:
path: /manageparcs/update/form/{nom}
defaults: { _controller: MySpaceManageBundle:Manage:update }
requirements:
methods: GET
updateParcs_form:
path: /manageparcs/update/form/{name}
defaults: { _controller: MySpaceManageBundle:Manage:update }
requirements:
methods: GET
# route for processing form with update
updateParcs_process:
path: /manageparcs/update/form/success
defaults: { _controller: MySpaceManageBundle:Manage:update }
requirements:
methods: POST
第二个路由不会像第一个路由那样指定名称参数。
原因是该方法需要该参数,但基于此配置,不会提供任何参数。
除非您想为POST请求创建另一个操作,否则您需要将名称添加到POST URI。
path: /manageparcs/update/form/{name}/success
您将需要使用此参数生成 URI。
我试图在JUnit 5中开发一个参数化测试,如下例所示。 尝试运行测试导致异常: 您必须为此@ParameterizedTest提供至少一个参数 这个信息让我觉得,我做错了什么,不是吗? p、 我有一个假设,只有原语类型的参数可用。
我是JavaFx新手,因此我找不到解决问题的方法 假设我有以下应用程序结构: 在SecondController中显示文本的最佳/最佳方式是什么,从FirstController传递文本。我的意思是,我在中输入一个文本,然后按下按钮,按下按钮后,我希望文本显示在使用另一个控制器的中。我已经阅读了很多关于和可以用来解决这个问题的知识,但不幸的是,我无法实现一个有效的解决方案。 如果你们专家能在这方面
我试图实现的是从main方法获取控制器实例,这样我就可以从另一个类调用控制器的方法并更新fxml。总之,这是我的代码: 主要类别: 我的控制器类: 试图调用控制器方法的类: 下面是我的错误信息: ConnectionHandling类:
我有一个测试,它可以做以下几点 我在一个吞吐量控制器中有一个GET请求。对于这个请求,我使用正则表达式提取器获取请求属性的值 如果我在一个吞吐量控制器中有两个请求,我就能够做到这一点。但是,如果我在2个不同的吞吐量控制器中有2个请求,同样的情况就不起作用了。 有人能帮忙吗?
需要你的帮助!这可能是更多的设计角度,但我在我的应用程序中使用这个模式,所以想得到一个想法。 我的问题是直接或间接地从一个控制器访问另一个控制器。是否有任何优雅的设计方法来做到这一点,而不是在另一个控制器中保留一个控制器的引用。 提前致谢
我想做的是在我的登录页面上读取一个超文本传输协议参数,例如,然后将传递给我的AuthenticationProvider。我的想法是以某种方式将保存在一个隐藏参数中,但我仍然不知道如何传递它。这可能吗?我该怎么做? 编辑:遵循萨那特的建议,在阅读了一些内容之后,我终于能够解决这个问题 - 如果你对我是如何做到的感兴趣,请看下面。