Получении доступа к значениям внутри свойства

snapget

Новичок
PHP:
$translation = new $this->langClassName;
        foreach ($this->languages as $lang) {
            foreach ($this->attributes as $attribute) {
                $attributeName = $this->localizedPrefix . $attribute;
                $this->setLangAttribute($this->getAttributeName($attribute, $lang), $translation->{$attributeName});
                if ($lang == $this->defaultLanguage) {
                    $this->setLangAttribute($attribute, $translation->{$attributeName});
                }
            }
        }
думаю ошибка здесь $translation->{$attributeName}, $attributeName это строка. Может быть на первом хосте php версия не понимает как доступитса до свойстава обьекта таким образом
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Как <доступиться> то она понимает, у тебя ошибка в том, что ты не пользуешься error_reporting и display_errors
 

Adelf

Administrator
Команда форума
нет там ошибки. читать научись. Он жалуется, что в каком-то месте, там где должна быть строка он встретил константу gender. И поскольку нет такой константы ты, скорее всего забыл кавычки поставить и все. Поищи в своем коде такое место.
 

snapget

Новичок
нет там ошибки. читать научись. Он жалуется, что в каком-то месте, там где должна быть строка он встретил константу gender. И поскольку нет такой константы ты, скорее всего забыл кавычки поставить и все. Поищи в своем коде такое место.
если бы я забыл поставить кавычки, то і на локалке была б та ошибка і на другом хосте
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@Adelf, я не знаю как ты, но я начинаю терять терпение.

@snapget, почему ты решил что ошибка у тебя была бы и там и там?
 

Adelf

Administrator
Команда форума
@snapget, таково поведение PHP когда оно встречает gender - оно ищет константу. если не находит, то превращает это строку 'gender' и генерирует предупреждение. На другом хосте и у тебя на локалке просто оно не показывает предупреждения. Да, ты можешь на другом хосте работать и забить. Но проще исправить это. Найди такую строку и все.
И если ты еще раз начнешь искать ошибки не там, я просто закрою тему.
 

snapget

Новичок
решил проблему.
ошибка была здесь:
PHP:
public function createLangClass()
    {
        if (!class_exists($this->langClassName, false)) {
            $namespace = substr($this->langClassName, 0, strrpos($this->langClassName, '\\'));
            eval('
            namespace ' . $namespace . ';
            use yii\db\ActiveRecord;
            class ' . $this->langClassShortName . ' extends ActiveRecord
            {
                public static function tableName()
                {
                    return \'' . $this->tableName . '\';
                }
            }');
        }
    }
$this->tableName я передавал в конфигурационном массиве вот так:
PHP:
return [
            'tableName' => "{{%'.$langForeign.'_lang}}",
        ];
переделал на так:
PHP:
$tableName = '{{%'.$langForeign.'_lang}}';
        return [
            'tableName' => $tableName,
        ];
и больше не выдает ошибки:).
Огромное спасибо что направили в нужную сторону, СПАСИБО!
 

Adelf

Administrator
Команда форума
Вряд ли ты исправил ошибку. Думаю где-то в $langForeign присваивается значение gender и там ошибка.
 

snapget

Новичок
Вряд ли ты исправил ошибку. Думаю где-то в $langForeign присваивается значение gender и там ошибка.
нет, там 'gender'
PHP:
public static function tableName()
    {
        return 'gender';
    }

    public function behaviors()
    {
        return BehaviorHelper::getDefaultBehavior(
            static::tableName(), // здесь инициализация $langForeign
            [BehaviorHelper::MULTILINGUAL_BEHAVIOR],
            ['name', 'short_name']
        );
    }
 

Adelf

Administrator
Команда форума
Странно блин.
В принципе, вижу кодогенерацию... мож там лажанулись, хз...
 

snapget

Новичок
я сделал ошибку в кавычках
PHP:
'tableName' => "{{%'.$langForeign.'_lang}}",
надо было
PHP:
'tableName' => '{{%'.$langForeign.'_lang}}',
 

Adelf

Administrator
Команда форума
Странно что оно работало вообще тогда. Ну да ладно. На этом можно и закончить.
 

snapget

Новичок
да, действительно странно)). Еще раз спасибо что помогли разобраться
 

Breeze

goshogun
Команда форума
Партнер клуба
с этими кавычками + eval очень красиво получилось :)
ничего странного
 
Сверху