После обновления с TYPO3 v9 до v10: Показать страницы больше не работают (нет доступа к защищенному свойству)

Я написал расширение на основе TYPO3 версии 9. Теперь я установил его в системе TYPO3 версии 10, и, похоже, все работает нормально. Только страницы шоу больше не открываются.

Приходит ошибка:

Cannot access protected property myname\myextension\Domain\Model\Country::$name

Я не понимаю ошибки. На странице списка я обычно использую название страны. На страницах Show вообще не использую. Поэтому не имеет смысла, почему это должно вызывать проблемы.

Вот мой Show.html

<div class="card">
    <h5 class="card-header" style="text-align: center">
        {house.name}
    </h5>
    <div class="card-body" style="text-align: center">
        <p class="card-text">
            <f:link.external uri="{house.link}" target="_blank">{house.link}</f:link.external>
        </p>
        <h2>Rooms</h2>
        <ul>
            <f:for each="{house.room}" as="room">
                <li>{room.name}</li>
            </f:for>
        </ul>
    </div>
</div>
<f:link.action action="list" class="btn btn-primary">
    BACK
</f:link.action>

Мой Контроллер

class HouseController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{
............
............
    /**
     * @param House $house
     */
    public function showAction(House $house)
    {
        $this->view->assign('house', $house);
    }

Как было сказано ранее, весь код отлично работает в версии 9, в версии 10 должно быть некоторое изменение проблем.

Изменить: вот моя модель страны

class Country extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{

    /**
     * Country Name
     * 
     * @var string
     * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
     */
    protected $name = '';

    /**
     * Returns the name
     * 
     * @return string $name
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Sets the name
     * 
     * @param string $name
     * @return void
     */
    public function setName($name)
    {
        $this->name = $name;
    }
}

А вот и моя модель дома (не все строчки):

class House extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
    /**
     * __construct
     */
     public function __construct()
     {

            //Do not remove the next line: It would break the functionality
            $this->initStorageObjects();
     }
    /**
     * Countrie House
     * 
     * @var \myname\myextension\Domain\Model\Country
     * @TYPO3\CMS\Extbase\Annotation\ORM\Lazy
     */
    protected $country = null;

    /**
     * Returns the country
     * 
     * @return \myname\myextension\Domain\Model\Country $country
     */
    public function getCountry()
    {
        return $this->country;
    }

    /**
     * Sets the country
     * 
     * @param \myname\myextension\Domain\Model\Country $country
     * @return void
     */
    public function setCountry(\myname\myextension\Domain\Model\Country $country)
    {
        $this->country = $country;
    }
}

person Lehtis    schedule 25.11.2020    source источник
comment
Я не вижу модели страны в вашем HTML и контроллере. Где используется эта модель? А как выглядит кантри-модель?   -  person Thomas Löffler    schedule 25.11.2020
comment
В моем шоу HTML нет модели страны. Это безумие. Но каждая модель дома связана с одной страной. (Дом находится точно в одной стране, а в доме несколько комнат.) Но эта модель также используется в List.html и работает без ошибок.   -  person Lehtis    schedule 25.11.2020
comment
Вы должны предоставить дополнительную информацию, каков код модели Дома?   -  person Florian Rival    schedule 25.11.2020
comment
Хорошо, я добавил модель своей страны и дома   -  person Lehtis    schedule 25.11.2020
comment
Можете ли вы удалить часть Lazy в своей модели дома и попробовать еще раз? Конечно, очистка всех кешей после удаления.   -  person Thomas Löffler    schedule 25.11.2020
comment
Здравствуйте, помогло удаление ленивого варианта. Теперь это работает. Большое спасибо :)   -  person Lehtis    schedule 25.11.2020


Ответы (1)


Проблема в том, что вы используете @TYPO3\CMS\Extbase\Annotation\ORM\Lazy для прямого отношения к модели. Аннотация @TYPO3\CMS\Extbase\Annotation\ORM\Lazy полезна при использовании ее для ObjectStorage, ее не рекомендуется использовать напрямую для других моделей.

person Thomas Löffler    schedule 25.11.2020