是否可以将参数传递给Drupal 8中的表单?

时间:2013-11-18 19:54:50

标签: yaml form-api drupal-8

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

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

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

3 个答案:

答案 0 :(得分: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) {

答案 1 :(得分:0)

You can get variables (foo and bar) like this one

public function buildForm(array $form, FormStateInterface $form_state, $foo = NULL, $bar = 1) {
   echo $foo;
   echo $bar;
}

答案 2 :(得分:-1)

我认为这可能不是最佳解决方案,但arg()可以帮助您。以arg(0)形式调用将给出'示例',arg(1)给出{entity_type}和arg(2){bundle_name}