想象一下像这样的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。有没有其他方法可以将参数传递给表单?
答案 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}