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

snapget

Новичок
Залил сайт на хостинг (php 5.6.14), видает такую ошибку:
Use of undefined constant gender - assumed 'gender'
На локальном сервере (Open Server, php 5.6) все работало хорошо. Использую фреймворк yii2. http://prntscr.com/99tv6d
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@snapget, на локальном сервере все тоже очень хреново, поверь.
 

Adelf

Administrator
Команда форума
угу. наверняка GenderLang::tablename() выглядит как-то так:
return gender;

а надо return 'gender'; Строки должны быть строками.
 

snapget

Новичок
кусок кода с GenderLang:

class GenderLang extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'gender_lang';
}
 

snapget

Новичок
думаю ошибка здесь:

PHP:
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} но на локалке етот код работает хорошо
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну и в какой строке ошибка?
 

Adelf

Administrator
Команда форума
ошибка в другой строке. Вероятно в языковых файлах(погляди нет ли там строки gender без кавычек). На локалке работает потому, что вывод предупреждений там отключен. А должно быть наоборот кстати.
 

AmdY

Пью пиво
Команда форума
подожди, у тебя трейс с третьей строки. приведи полный
 

Adelf

Administrator
Команда форума
угу. ты еще и логин пароль нам скинь. чо уж там :)))
 

snapget

Новичок
только что закинул на другой хост, там работает, значить проблема в хосте
 

AmdY

Пью пиво
Команда форума
нет, проблема у тебя в коде.
он работает потому что показ ошибок отключён.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Последний раз спрашиваю, в какой строке ошибка? Где нормальный трейс?
 

snapget

Новичок
PHP:
class MultilingualBehavior extends Behavior
{
   // другой код класа
  public function attach($owner)
    {
        /** @var ActiveRecord $owner */
        parent::attach($owner);

        if (empty($this->languages) || !is_array($this->languages)) {
            throw new InvalidConfigException('Please specify array of available languages for the ' . get_class($this) . ' in the '
                . get_class($this->owner) . ' or in the application parameters', 101);
        }

        if (array_values($this->languages) !== $this->languages) { //associative array
            $this->languages = array_keys($this->languages);
        }

        $this->languages = array_unique(array_map(function ($language) {
            return $this->getLanguageBaseName($language);
        }, $this->languages));

        if (!$this->defaultLanguage) {
            $this->defaultLanguage = isset(Yii::$app->params['defaultLanguage']) && Yii::$app->params['defaultLanguage'] ?
                Yii::$app->params['defaultLanguage'] : Yii::$app->language;
        }

        $this->defaultLanguage = $this->getLanguageBaseName($this->defaultLanguage);

        if (!$this->currentLanguage) {
            $this->currentLanguage = $this->getLanguageBaseName(Yii::$app->language);
        }

        if (empty($this->attributes) || !is_array($this->attributes)) {
            throw new InvalidConfigException('Please specify multilingual attributes for the ' . get_class($this) . ' in the '
                . get_class($this->owner), 103);
        }

        if (!$this->langClassName) {
            $this->langClassName = get_class($this->owner) . 'Lang';
        }

        $this->langClassShortName = $this->getShortClassName($this->langClassName);
        $this->ownerClassName = get_class($this->owner);
        $this->ownerClassShortName = $this->getShortClassName($this->ownerClassName);

        /** @var ActiveRecord $className */
        $className = $this->ownerClassName;
        $this->ownerPrimaryKey = $className::primaryKey()[0];

        if (!isset($this->langForeignKey)) {
            throw new InvalidConfigException('Please specify langForeignKey for the ' . get_class($this) . ' in the '
                . get_class($this->owner), 105);
        }

        $rules = $owner->rules();
        $validators = $owner->getValidators();

        foreach ($rules as $rule) {
            if (in_array($rule[1], $this->excludedValidators))
                continue;

            $rule_attributes = is_array($rule[0]) ? $rule[0] : [$rule[0]];
            $attributes = array_intersect($this->attributes, $rule_attributes);

            if (empty($attributes))
                continue;

            $rule_attributes = [];
            foreach ($attributes as $key => $attribute) {
                foreach ($this->languages as $language)
                    if ($language != $this->defaultLanguage)
                        $rule_attributes[] = $this->getAttributeName($attribute, $language);
            }

            if (isset($rule['skipOnEmpty']) && !$rule['skipOnEmpty'])
                $rule['skipOnEmpty'] = !$this->requireTranslations;

            $params = array_slice($rule, 2);

            if ($rule[1] !== 'required' || $this->requireTranslations) {
                $validators[] = Validator::createValidator($rule[1], $owner, $rule_attributes, $params);
            } elseif ($rule[1] === 'required') {
                $validators[] = Validator::createValidator('safe', $owner, $rule_attributes, $params);
            }
        }

        if ($this->dynamicLangClass) {
            $this->createLangClass();
        }

        $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});
                }
            }
        }
    }
//...
}
 

Adelf

Administrator
Команда форума
@snapget, тебя не смущают что они имеют номера 3 и 4. Вместо 1 и 2.
 
Сверху