【发布时间】:2015-11-24 07:49:04
【问题描述】:
我开始构建一个 drupal 8 自定义模块,但无法运行它。它显示页面未找到错误。
我的模块名称是 my_form,这里是 my_form.module 文件
<?php
function my_form_menu()
{
$items = array();
$items['hello'] = array(
'title' => 'Hello World',
'description' => 'This is my First page.',
'route' => 'my_form.hello',
//'type' => MENU_LOCAL_TASK,
);
$items['form'] = array(
'title' => 'First form',
'description' => 'This is a example form.',
'route' => 'my_form.formpage',
//'type' => MENU_LOCAL_TASK,
);
return $items;
}
?>
这里是 my_form.routing.yml 文件
<?php
my_form.hello:
path: 'my_form/myformcontroller'
defaults:
_controller: '\Drupal\my_form\Controller\myformcontroller::hello'
_title: 'My first form in Drupal 8'
requirements:
_permission: 'access content'
my_form.formpage:
path: 'my_form/form'
defaults:
_form: '\Drupal\my_form\Form\form'
_title: 'Form page'
requirements:
_permission: 'access content'
?>
我认为他的主要冲突是这个文件,请告诉路由路径或命名是否有问题。(我仍然不确定我是否在定义路由时为 PATH 字段提供了正确的路径。) 这是 myformcontroller.php,其路径为 [module]\src\Controller\
<?php
namespace Drupal\my_form\Controller;
class myformcontroller
{
public function hello()
{
$element['markUp'] = array(
#markup' => 'Hello world!',
);
return $element;
}
}
?>
这是位于 [module]\src\Form\form.php
的 form.php <?php
namespace Drupal\my_form\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Component\Utility\UrlHelper;
class formpage extends FormBase {
public function getFormId() {
return 'my_form_formpage_form';
}
public function buildForm(array $form, FormStateInterface $form_state) {
$form['name'] = array(
'#type' => 'textfield',
'#title' => 'name',
'#required' => TRUE,
);
$form['email'] = array(
'#type' => 'textfield',
'#title' => 'email',
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
$email = $form_state['values']['email'];
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
form_set_error('email', t('Invalid email format'));
}
}
public function submitForm(array &$form, FormStateInterface $form_state) {
foreach ($form_state->getValues() as $key => $value)
{
drupal_set_message($key . ': ' . $value);
}
}
}
?>
请帮帮我。
【问题讨论】:
-
不使用 my_form.module 来描述菜单,菜单项必须在 module_name.links.menu.yml 文件中定义 https://www.drupal.org/node/2122241
标签: controller routing drupal-modules drupal-8