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

问题描述 投票:0回答:1

我向我的树枝页面发送了一个由 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;
        }
    }
javascript php arrays json twig
1个回答
1
投票

你的对象中的属性是私有的,这意味着当你对对象进行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()
-method.

演示:https://3v4l.org/KueIs

© www.soinside.com 2019 - 2024. All rights reserved.