получаю название свойтсва объекта модели

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

получаю название свойтсва объекта модели

Сообщение iamguruman »

Я довольно часто работаю с гридвью или детейлвью и мне надоело каждый раз вспомниать как называются свойства объекта модели... немного заморочился и сделал такую функцию:

Код: Выделить всё

function aObjName( $v , $get_class_var_name = false) {
    $trace = debug_backtrace();
    $vLine = file( __FILE__ );
    $fLine = $vLine[ $trace[0]['line'] - 1 ];
    $pattern = '/aObjName\(\$(.*?)->(.*?)\)/';
    preg_match($pattern, $fLine, $matches);
    ddd($matches);
    if($get_class_var_name == false){
        if(!empty($matches[2])){
            return $matches[2];
        }
    } else {
        if(!empty($matches[1])){
            return $matches[1];
        }
    }
}
пример использования:

$model->objname = "objvalue";
echo aObjName($model->objname); //напечатает objname
echo aObjName($model->objname, true); //напечатает model

и теперь делаю так:

Код: Выделить всё

?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'name',
            aObjName($model->supply_artikle),
        ],
    ]) ?>
решил поделиться лайфхаком =) это работает в случае если функция находится в одном файле где обращаюсь к функции... вот думаю как это можно без копирования функции в файл где ее вывзываю сделать,
может быть такое (или более удобное) уже штатно реализовано в самом и2? или и3? или такое есть в пхп?
Последний раз редактировалось iamguruman 2023.11.11, 17:49, всего редактировалось 1 раз.
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Re: получаю название объекта модели

Сообщение iamguruman »

Сам спросил и сам придумал решение =)

Код: Выделить всё

function aObjName( $v , $filePath, $get_class_var_name = false) {
        $trace = debug_backtrace();
        $vLine = file( $filePath );
        $fLine = $vLine[ $trace[0]['line'] - 1 ];
        $pattern = '/aObjName\(\$(.*?)->(.*?),/';
        preg_match($pattern, $fLine, $matches);
        if($get_class_var_name == false){
            if(!empty($matches[2])){
                return $matches[2];
            }
        } else {
            if(!empty($matches[1])){
                return $matches[1];
            }
        }
    }
обращаюсь к функции так:
echo aObjName($model->objname, __FILE__); //напечатает objname

может быть есть лучше вариант?
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Re: получаю название свойтсва объекта модели

Сообщение iamguruman »

Код: Выделить всё

        // 1 check null
        $childs = Ibox::find()
            ->andWhere([aObjName(Ibox::$parent_ibox_id, __FILE__) => $id])
            ->andWhere(['parent_ibox_id' => $id])
            ->all();
            
?)
Ответить