Câu trả lời:
Các link
( liên kết ) hiển thị loại yếu tố được sử dụng để làm cho một yếu tố neo trên một trang, và không được sử dụng để cung cấp một yếu tố đầu vào trong một hình thức đó là hạn chế cho các URL.
Để làm ví dụ, bạn có thể xem LinkWidget :: formE bổ sung , cho thấy cách tiện ích trường đó tạo các thành phần biểu mẫu cho trường Liên kết. Và cách thức thực hiện là sử dụng phần tử biểu mẫu url
( Url ), phần tử này sẽ cung cấp phần tử đầu vào xác thực URL. Đảm bảo rằng thuộc #url
tính là một đối tượng ( Url ) hợp lệ .
$form['test_ink'] = [
'#type' => 'url',
'#title' => $this->t('Link title'),
// Example of a Url object from a route. See the documentation
// for more methods that may help generate a Url object.
'#url' => Url::fromRoute('entity.node.canonical', ['node' => 1]),
];
Chỉnh sửa :
use Drupal\Core\Url; $element['test_link'] = [ '#type' => 'link', '#title' => t('Link title'), '#url' => Url::fromRoute('entity.node_type.collection'), ];
Tôi đã phải đối mặt với vấn đề này khi tôi cần thêm một liên kết (url + nhãn) vào biểu mẫu cài đặt chủ đề. Tôi đã không sử dụng trường url vì nó có lỗi nếu người dùng muốn thêm liên kết nội bộ.
Đây là cách nó nhìn trên CMS:
Đây là mã:
/**
* Implements hook_form_system_theme_settings_alter().
**/
function francisco_form_system_theme_settings_alter(&$form, \Drupal\Core\Form\FormStateInterface &$form_state, $form_id = NULL) {
// Work-around for a core bug affecting admin themes. See issue #943212.
if (isset($form_id)) {
return;
}
$form['francisco_theme_option_sidebar'] = array(
'#type' => 'details',
'#title' => t('Sidebar'),
'#description' => t('Lorem ipsum.'),
'#open' => TRUE,
);
$form['francisco_theme_option_sidebar']['francisco_theme_option_sidebar_footer_cta_title'] = array(
'#type' => 'textfield',
'#title' => t('Link Title'),
'#default_value' => theme_get_setting('francisco_theme_option_sidebar_footer_cta_title'),
'#description' => t("Lorem ipsum."),
'#maxlength' => 255
);
$form['francisco_theme_option_sidebar']['francisco_theme_option_sidebar_footer_cta_url'] = array(
'#type' => 'textfield',
'#title' => t('URL'),
'#default_value' => theme_get_setting('francisco_theme_option_sidebar_footer_cta_url'),
'#description' => t("Lorem ipsum."),
'#maxlength' => 2048,
);
}
Tôi thích câu trả lời của @ mpp về cách tạo trường liên kết nếu bạn bật mô-đun Linkit. Ví dụ của anh ấy không phải là mã được định dạng, vì vậy đây chỉ là một bản đăng lại sử dụng mã được định dạng để dễ đọc hơn và để dễ dàng sao chép dán mã này để sử dụng trong các dự án của riêng bạn. Tạo trường liên kết với mẫu api của Drupal:
$form['block_link'] = [
'#type' => 'linkit',
'#title' => $this->t('Select link target'),
'#description' => $this->t('Start typing to see a list of results. Click to select.'),
'#autocomplete_route_name' => 'linkit.autocomplete',
'#autocomplete_route_parameters' => [
'linkit_profile_id' => 'default',
],
'#default_value' => isset($config['block_link']) ? $config['block_link'] : '',
];
Lưu ý rằng bạn có thể thay đổi 'mặc định' thành bất kỳ hồ sơ liên kết nào bạn có thể có trong dự án của mình. Cũng lưu ý: giá trị mặc định của tôi trong trường hợp này xuất phát từ biểu mẫu cấu hình khối vì tôi đã thêm trường liên kết này vào trang cài đặt của khối. Xóa #default_value nếu nó không áp dụng cho trường hợp của bạn hoặc thay đổi tùy thuộc vào nơi bạn nhận được giá trị của mình.
url
loại không được sử dụng, thay vào đóentity_autocomplete
.