【问题标题】:Cannot extends Model无法扩展模型
【发布时间】:2015-07-15 07:57:06
【问题描述】:

我想创建一个扩展Modelclass

<?php

use Phalcon\Mvc\Model;
use Phalcon\Mvc\Model\Query;

class ModelBase extends Model {

    var $table = null;

    public function __construct($table) {
        parent::__construct();
        $this->table = $table;
    }
    ...
}
?>

这个class ModelBase 将被所有模型classes 扩展。

在运行时我收到一条错误消息:PHP Fatal error: Cannot override final method Phalcon\Mvc\Model::__construct() in D:\wamp\www\resto\app\models\ModelBase.php on line 117

那么如何正确扩展 Model class 呢?

【问题讨论】:

  • 可以扩展Model:可以添加新的方法和属性;但您只能覆盖那些在Model - docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Model.html 中未定义为final 的方法
  • 那么如何将$table 变量传递到类 ModelBase 中?
  • 如果你想将表名传递给构造函数,你必须通过dependencyInjector来完成
  • 我是 Phalcon 的新手,我该怎么做?
  • 它是与扩展 ModelBase 的类关联的表的名称。

标签: php phalcon phalcon-routing


【解决方案1】:

在您的基础模型中使用 onConstruct 方法。

class ModelBase extends \Phalcon\Mvc\Model
{
    protected $_table;

    public function onConstruct()
    {
        $this->_table = 'whatever';
    }
}

然后您可以测试扩展基本模型是否有效。

class SomeModel extends \ModelBase
{
    public function test()
    {
        echo $this->_table;
    }
}

所以调用扩展模型的测试方法会回显whatever

$model = new SomeModel();
$model->test();

【讨论】:

  • 如何将参数传递给onConstruct方法给_table变量赋值?
  • @pheromix 你不能因为参数是硬编码的(它们是 di 和模型管理器对象)。另外,您不必这样做,因为模型基本上是数据库表的记录-您不会将参数传递给数据库表-您可以直接使用 $model->table = 'whatever' 设置它们.所有其他方法,例如 setSource 都为您准备好了check the docs
【解决方案2】:

如果$table是模型的数据库表名,最好的设置方法是:

class SomeModel extends ModelBase
{
    public function getSource()
    {
        return 'table_name';
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 2017-02-20
    • 2011-10-08
    相关资源
    最近更新 更多