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

#typo3 #typo3-9.x #typo3-10.x

#typo3 #typo3-9.x #typo3-10.x

Вопрос:

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

Появляется ошибка:

 Cannot access protected property mynamemyextensionDomainModelCountry::$name
 

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

Вот мой 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 TYPO3CMSExtbaseMvcControllerActionController
{
............
............
    /**
     * @param House $house
     */
    public function showAction(House $house)
    {
        $this->view->assign('house', $house);
    }
 

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

Редактировать: Вот моя модель страны

 class Country extends TYPO3CMSExtbaseDomainObjectAbstractEntity
{

    /**
     * Country Name
     * 
     * @var string
     * @TYPO3CMSExtbaseAnnotationValidate("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 TYPO3CMSExtbaseDomainObjectAbstractEntity
{
    /**
     * __construct
     */
     public function __construct()
     {

            //Do not remove the next line: It would break the functionality
            $this->initStorageObjects();
     }
    /**
     * Countrie House
     * 
     * @var mynamemyextensionDomainModelCountry
     * @TYPO3CMSExtbaseAnnotationORMLazy
     */
    protected $country = null;

    /**
     * Returns the country
     * 
     * @return mynamemyextensionDomainModelCountry $country
     */
    public function getCountry()
    {
        return $this->country;
    }

    /**
     * Sets the country
     * 
     * @param mynamemyextensionDomainModelCountry $country
     * @return void
     */
    public function setCountry(mynamemyextensionDomainModelCountry $country)
    {
        $this->country = $country;
    }
}
 

Комментарии:

1. Я не вижу никакой модели страны в вашем HTML и контроллере. Где используется эта модель? А как выглядит модель страны?

2. Точно так же в моем Show HTML нет модели страны. Это безумие. Но каждая модель Дома имеет отношение к одной стране. (Дом находится точно в одной стране, и в доме есть несколько комнат.) Но эта модель также используется в List.html и работает без ошибок.

3. Вы должны предоставить больше информации, каков код модели Дома?

4. Хорошо, я добавил свою модель страны и дома

5. Можете ли вы удалить отложенную часть в своей домашней модели и повторить попытку? Конечно, очистка всех кэшей после удаления.

Ответ №1:

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

Ответ №2:

Похоже, это ошибка в ядре TYPO3 — смотрите также: https://forge.typo3.org/issues/92357