Buộc chuyển hướng trong trình xử lý trình mặc dù đã đặt tham số đích


9

Tôi thêm trình xử lý gửi tùy chỉnh và bây giờ tôi muốn Chuyển hướng đến tuyến tùy chỉnh sau khi gửi biểu mẫu.

Đây là những gì tôi đã sử dụng

use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\HttpFoundation\Request;
use \Drupal\Core\Url;

function MYMODULE_form_alter(&$form, FormStateInterface $form_state, $form_id) {

    if ($form_id == 'node_trends_form' || $form_id == 'node_trends_edit_form') {

        foreach (array_keys($form['actions']) as $action) {
            if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
                $form['actions'][$action]['#submit'][] = 'zyetondev_sync_trends_submit';
            }
        }
    }
}


function zyetondev_sync_trends_submit(array $form, FormStateInterface $form_state) {
    $url = Url::fromRoute('view.trends.page_1');
//    die(Url::fromRoute('view.trends.page_1')->toString());
    drupal_set_message("Done");
    $form_state->setRedirect($url);
}

Gửi Trình xử lý đang chạy và chuyển hướng chuyển hướng hoạt động chính xác, Vấn đề là khi chúng tôi có ?destination=trên Url, Làm cách nào tôi có thể buộc chuyển hướng mặc dù ?destination=là trên Url?


Nếu tôi đã hiểu chính xác yêu cầu của bạn, bạn cũng muốn bao gồm các tham số truy vấn trong quá trình chuyển hướng? Sửa tôi nếu sai.
Yogesh

@Yogesh hãy giả sử bạn đang bật / admin / nội dung, khi cố gắng chỉnh sửa một nút ?destination=/admin/contentđược thêm vào url, tôi muốn chuyển hướng đường dẫn tùy chỉnh của mình mặc dù ?destination=tồn tại trong url.
Yuseferi

Câu trả lời:


14

Cách chính xác duy nhất để làm điều này là thay đổi đối tượng Yêu cầu và thả đích.

Trong cuộc gọi lại gửi của bạn:

\Drupal::request()->query->remove('destination');

Tùy thuộc vào ngữ cảnh, bạn có thể muốn lưu trữ nó ở đâu đó, ví dụ như chuyển nó tới URL mà bạn đang chuyển hướng để nó được tôn trọng lại sau đó.

Xem https://www.drupal.org/node/2325463 để biết vấn đề cốt lõi đang thực hiện chính xác điều này để khắc phục nút xem trước nếu điểm đến được đưa ra.


1

Mã này sẽ giúp bạn.

 $url = \Drupal\Core\Url::fromRoute(
        'node.add',
         array('node_type' => $type->id()),
         array(
           'query' => array('destination' => $destination),
           'absolute' => TRUE,
         )
    );
   $form_state->setRedirect($url);

Mã bạn đang hiển thị thậm chí sẽ không chuyển hướng người dùng. Nó chỉ tạo một đối tượng URL mà không thực hiện bất kỳ chuyển hướng nào.
kiamlaluno
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.