<?php
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Database\Driver\mysql\Connection;
class <classname> extends FormBase {
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$data = get_data(); // this just summarises getting all the data from $form_state
$result = Connection::insert('<database-name>')
->fields($data)
->execute();
如果通过尝试提交表单来运行上述操作(为了简洁起见,我将buildForm
方法保留了下来),我得到了
Fatal error: Call to undefined method Drupal\<module>\Form\<form-name>::getDriverClass() in <drupal-root>/core/lib/Drupal/Core/Database/Connection.php on line 812
812处的方法是insert
:
/**
* Prepares and returns an INSERT query object.
*
* @param string $table
* The table to use for the insert statement.
* @param array $options
* (optional) An array of options on the query.
*
* @return \Drupal\Core\Database\Query\Insert
* A new Insert query object.
*
* @see \Drupal\Core\Database\Query\Insert
*/
public function insert($table, array $options = array()) {
$class = $this->getDriverClass('Insert');
return new $class($this, $table, $options);
}
我并不是特别熟悉如何在PHP中使用面向对象的技术,所以我不知道我的问题是我使用名称空间/ use
关键字,还是使用我尝试调用insert
方法的方式,与使用外部静态对象相关的其他方法,或者是否还有其他完全缺失的内容。
任何人都可以帮我找到并修复错误吗?
感谢。
答案 0 :(得分:0)
您“使用”错误的班级。替换为:
use Drupal\Core\Database\Connection;
定义变量
/**
* @var Connection
*/
protected $db;
填写构造函数
public function __construct(/* other stuff*/, Connection $db) {
//stuff
$this->db = $db;
}
扩展创建功能
public static function create(ContainerInterface $container) {
return new static(
//stuff
$container->get('database')
);
}
使用它:)
$this->db->insert()