2

想象一个像这样的 YAML 路由配置:

foobar.example:
  path: 'example/{entity_type}/{bundle_name}'
  defaults:
    _form: '\Drupal\foobar\Form\FoobarExampleForm'
    _title: 'Example Form'
    foo: 0
    bar: 1

参数 foo 和 bar 将被传递给控制器​​,但是如何将参数传递给表单?我意识到 entity_type 和 bundle_name 可以使用 arg() 或 menu_get_object() 来检索。还有其他方法可以将参数传递给表单吗?

4

3 回答 3

2

如果您要询问将附加值传递到未由路由加载的表单中,请执行以下操作:

public function buildForm(array $form, FormStateInterface $form_state, $item = array()) { 
  // Form code here
}

当你调用它时,就这样做

$form = \Drupal::formBuilder()->getForm('\Drupal\MYMODULE\Form\MYFORMCLASS', $item);

重要提示:如果在声明函数时没有给它一个默认值,你会得到一个 PHP 致命错误。所以不要这样做(没有 = array()):

public function buildForm(array $form, FormStateInterface $form_state, $item) {
于 2016-04-07T13:02:45.680 回答
0

您可以像这样获得变量(foo 和 bar)

public function buildForm(array $form, FormStateInterface $form_state, $foo = NULL, $bar = 1) {
   echo $foo;
   echo $bar;
}
于 2016-04-25T09:21:05.160 回答
-2

我认为这可能不是最好的解决方案,但 arg() 可以帮助你。以 arg(0) 形式调用会给你'example',arg(1) 给 {entity_type} 和 arg(2) {bundle_name}

于 2014-06-25T21:10:15.060 回答