致命错误:在Drupal 8数据库插入中调用未定义的方法

时间:2016-01-13 10:15:35

标签: php oop drupal namespaces drupal-8

<?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方法的方式,与使用外部静态对象相关的其他方法,或者是否还有其他完全缺失的内容。

任何人都可以帮我找到并修复错误吗?

感谢。

1 个答案:

答案 0 :(得分:0)

  1. 您“使用”错误的班级。替换为:

    use Drupal\Core\Database\Connection;
    
  2. 定义变量

    /**
    * @var Connection
    */
    protected $db;
    
  3. 填写构造函数

    public function __construct(/* other stuff*/, Connection $db) {
      //stuff
      $this->db = $db;
    }
    
  4. 扩展创建功能

    public static function create(ContainerInterface $container) {
      return new static(
        //stuff
        $container->get('database')
      );
    }
    
  5. 使用它:)

    $this->db->insert()