gpt4 book ai didi

php - PhalconPHP模型

转载 作者:行者123 更新时间:2023-12-02 22:11:39 25 4
gpt4 key购买 nike

我有两个与 Phalcon 中的模型相关的问题,我正在努力寻找答案:

  1. 如何访问模型中的依赖注入(inject)器?
  2. 创建一个不绑定(bind)到数据库表的模型是否合理?如果不是,那么我应该将不需要存储的逻辑(一些函数与 API 一起使用)放在哪里?

最佳答案

您可以使用 getDefault() 函数从代码中的任何位置访问 Di

$di = \Phalcon\DI\FactoryDefault::getDefault();

您可以扩展 Phalcon 模型以公开某些功能并使用该功能扩展您的模型。例如,考虑以下提供更多功能的模型(您始终可以根据需要扩展它。在下面的示例中,我将展示如何使用构建器来构建查询以及可用于获取模式的函数对于特定型号。

class MyModel extends \Phalcon\Mvc\Model
{
protected static function di()
{
return \Phalcon\DI\FactoryDefault::getDefault();
}

public static function fetchSchema()
{
return "schema generators";
}

public static function fetchById($id)
{
$results = null;

try {

$builder = self::getBuilder();

$field = 'id';

$bind[$field] = $id;

$builder->where("{$field} = :{$field}:");

$query = $builder->getQuery();

// One record is needed here so set the unique row
$query->setUniqueRow(true);

// Execute!
$results[] = $query->execute($bind);

} catch (\Exception $e) {

$results = self::exceptionToArray($e);

}

return $results;
}

protected static function getBuilder()
{
$di = self::di();
$manager = $di['modelsManager'];
$builder = $manager->createBuilder();
$builder->from(get_called_class());

return $builder;
}

protected static function execute($builder, $bind, $unique = false)
{
$query = $builder->getQuery();

// One record is needed here so set the unique row
$query->setUniqueRow($unique);

// Execute!
$results = $query->execute($bind);

if (!$results || count($results) == 0) {
$results = array();
}

return $results;
}

protected static function exceptionToArray($exception)
{
$results['error'] = array(
'code' => $exception->getCode(),
'file' => $exception->getFile(),
'line' => $exception->getLine(),
'message' => $exception->getMessage(),
'trace' => $exception->getTrace(),
'trace_as_string' => $exception->getTraceAsString()
);

return $results;
}
}

关于php - PhalconPHP模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15189955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com