cakephp 如何从模型中调用自定义函数?

eagi6jfj  于 2022-11-11  发布在  PHP
关注(0)|答案(2)|浏览(219)

我使用的是CakePHP3.0.5,我只是从模型中调用自定义函数。但它显示未知方法错误。我如何从控制器中调用自定义函数?

// Controller
class TopController extends AppController {
  public function initialize() {
    parent::initialize();
    $this->loadModel('TopRawSql');
  }

  public function showTop(){
    $data = TableRegistry::get('TopRawSql');
    $data->getTest(); // Unknown method error occur
  }
}

// Model
class TopRawSql extends Table {
  public function getTest() {
    return 'OK';
  }
}

我跟踪了错误消息,发现了下面的代码。这是否意味着,我不能使用没有“find”前缀的自定义函数名?

// vendor->cakephp->src->ORM->Table.php
public function __call($method, $args)
{
    if ($this->_behaviors && $this->_behaviors->hasMethod($method)) {
        return $this->_behaviors->call($method, $args);
    }
    if (preg_match('/^find(?:\w+)?By/', $method) > 0) {
        return $this->_dynamicFinder($method, $args);
    }

    throw new \BadMethodCallException(
        sprintf('Unknown method "%s"', $method)
    );
}
iq0todco

iq0todco1#

您的表类名称错误,所有表类必须以Table结尾,即TopRawSqlTable
如果类名不对,我认为文件名也可能是错的。我不知道你是否在文件中设置了正确的命名空间,或者根本没有命名空间,因为它没有在你的问题中显示出来,但这也需要遵守相应的约定,通常是App\Model\Table
如果找不到所请求别名的类,则将使用\Cake\ORM\Table的泛型示例,这当然会导致失败,因为它没有任何自定义代码。
另请参阅

*Cookbook〉CakePHP概览〉CakePHP惯例〉模型惯例


*Cookbook〉配置〉禁用通用表

llmtgqce

llmtgqce2#

回答你的问题,是的。call()魔术函数将要求模型体中的每个函数要么是get* 要么是set* 函数。但是你引用的代码直接指向你要寻找的答案:创建一个Behavior并根据需要调用该函数。

相关问题