我向我的小枝页面发送一个由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;
}
}
1条答案
按热度按时间np8igboo1#
对象中的属性是私有的,这意味着当您对对象进行JSON编码时,它们将被忽略。
如果你想让这些属性保持私有,你可以使用JsonSerializable-interface来决定当对象被序列化为json时你想让它使用什么。
1.让
Aggression
实现该接口:1.将所需的方法添加到类中:
如果现在将对象传递给
json_encode()
,PHP将使用对象jsonSerialize()
-方法的响应。演示:https://3v4l.org/KueIs