php - drupal 形式 Action

标签 php forms drupal

我创建了一个表单,例如:

function create_custom_form($form, &$form_state) {
    $form['#action'] = "#";
        ....
}

function create_custom_form_validate($form, &$form_state) {
        ....
}

function create_custom_form_submit($form, &$form_state) {
        ....
        if(..)
           drupal_goto('abc');
        else
           drupal_goto('xxx');
}

当我在执行操作之前并在阅读我的函数之后提交此表单 drupal 时...我如何绕过操作表单并仅读取 _submit 函数?

最佳答案

请勿使用 drupal_goto 因为可能有更多的“提交”回调要执行。 drupal_goto函数会中断这些。

相反,请使用$form_state['redirect'] = ... http://api.drupal.org/api/drupal/includes!form.inc/function/drupal_redirect_form/7

function create_custom_form_submit($form, &$form_state) {
        ....
        if(..)
           $form_state['redirect'] = 'abc';
        else
           $form_state['redirect'] = 'xxx';
}

由于此函数具有相同的表单 ID (create_custom_form) - 附加单词“_submit”,因此该函数将自动执行,因此无需在表单中添加任何提交回调.

如果您希望在提交时执行附加函数,那么您应该按照 Hamza 的建议进行操作,只是您的附加函数将具有不同的名称。例如

function create_custom_form($form, &$form_state) {
  $form['#action'] = "#";
  ....
  // Add any additional callbacks to call before any redirects happen
  $form['#submit'][] = 'create_custom_form_additional_submit_callback';    
  $form['#submit'][] = ...
}

function create_custom_form_additional_submit_callback($form, &$form_state) {
  // Do something before redirect
  ...
}

在上面的例子中:

  • create_custom_form_additional_submit_callback

  • create_custom_form_submit(因为其名称相同,但附加了“_submit”)

将执行,并且只有当它们都完成时才会执行重定向。

关于php - drupal 形式 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9940580/

相关文章:

php - 无法使用 SF2 将上传的文件保存到文件系统

docker - docker-compose drupal不接受我的数据库名称,并在下面抛出错误

php - Symfony 2.1 - 未捕获的 PHP 异常 Twig_Error_Runtime

javascript - 使用 anchor + javascript 提交表单 - 不好的做法?

css - 如何将 2 div 与表单对齐

jquery - 使用 jquery 从 drupal wysiwyg 编辑器读取内容

javascript - jQuery:查找包含特定文本的元素

PHP SQL 连接

javascript - 在 javascript 中正确获取 json

php - 如何在 Javascript 中使用 PHP 变量?