javascript 我的选择器选项未定义,但选择器长度很好

yrdbyhpb  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(172)

我向我的小枝页面发送一个由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;
        }
    }
np8igboo

np8igboo1#

对象中的属性是私有的,这意味着当您对对象进行JSON编码时,它们将被忽略。
如果你想让这些属性保持私有,你可以使用JsonSerializable-interface来决定当对象被序列化为json时你想让它使用什么。
1.让Aggression实现该接口:

use JsonSerializable;

class Aggression implements JsonSerializable
{

1.将所需的方法添加到类中:

/**
 * 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()-方法的响应。
演示:https://3v4l.org/KueIs

相关问题