我向我的树枝页面发送了一个由 3 个对象组成的数组(我的单元测试有效,我的对象在这里不为空):
echo $this->twig->render('form/index.html.twig', ['verbalAggressions' => $verbal_aggressions]);
然后我得到:
const verbalAggressions = {{ verbalAggressions|json_encode }};
我的变量由 3 个对象组成,但它们是未定义的:
我用的是3.4.3版的twig,也许我应该升级?
我的模型属性:
<?php
namespace app\models;
use app\database\Database;
/**
* The aggressions
*/
class Aggression
{
/**
* @var int
*/
private int $id;
/**
* @var string
*/
private string $name;
/**
* @var string
*/
private string $type;
/**
* @param int $id
* @param string $name
* @param string $type
*/
public function __construct(int $id, string $name, string $type)
{
$this->id = $id;
$this->name = $name;
$this->type = $type;
}
我的吸气剂:
public function getId(): int
{
return $this->id;
}
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @return string
*/
public function getType(): string
{
return $this->type;
}
我的言语攻击方法:
public static function getVerbalAggressions(): array|null
{
$aggressions = Aggression::findAll();
if ($aggressions != null) {
$verbalAggressions = [];
foreach ($aggressions as $verbalAggression) {
if ($verbalAggression instanceof Aggression) {
if ($verbalAggression->getType() == 'Verbale' || $verbalAggression->getType() == 'Commun') {
$verbalAggressions[] = $verbalAggression;
}
}
}
return $verbalAggressions;
} else {
return null;
}
}
你的对象中的属性是私有的,这意味着当你对对象进行json编码时,它们将被忽略。
如果你想保持这些属性私有,你可以使用 JsonSerializable-interface 来决定你希望对象在序列化为 json 时使用什么。
Aggression
实现接口:use JsonSerializable;
class Aggression implements JsonSerializable
{
/**
* Return the data that should be json serialized
*
* @return mixed
*/
public function jsonSerialize(): mixed
{
// Here you can return an array with all the properties you want in your json
return [
'id' => $this->getId(),
'name' => $this->getName(),
'type' => $this->getType(),
];
}
如果现在将对象传递给
json_encode()
,PHP将使用对象的响应jsonSerialize()
-method.