Yaml 在Drupal8中是否可以将参数传递给表单?
想象一个YAML路由配置,如下所示:Yaml 在Drupal8中是否可以将参数传递给表单?,yaml,form-api,drupal-8,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对象检索实体类
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对象检索实体类型和bundle名称。是否有其他方法将参数传递给表单?我认为这可能不是最好的解决方案,但arg可以帮助您。调用表格arg0将为您提供“示例”,arg1将为{entity_type}和arg2提供{bundle_name}如果您要求将附加值传递到未由路由加载的表格中,请执行以下操作:
public function buildForm(array $form, FormStateInterface $form_state, $item = array()) {
// Form code here
}
当你叫它的时候,就这样做
$form = \Drupal::formBuilder()->getForm('\Drupal\MYMODULE\Form\MYFORMCLASS', $item);
重要提示:如果在声明函数时没有给它一个默认值,则会得到一个PHP致命错误。因此,在没有=数组的情况下不要执行此操作:
public function buildForm(array $form, FormStateInterface $form_state, $item) {
你可以得到像这样的变量foo和bar
public function buildForm(array $form, FormStateInterface $form_state, $foo = NULL, $bar = 1) {
echo $foo;
echo $bar;
}