Как передать параметр в helper

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Как передать параметр в helper

Сообщение Akulenok »

Не силен в ООП, изучаю вместе с Yii.

Есть контроллер, создание простой страницы, в которой надо создать alias , и где alias будет в транслите из титла.
Создал в своей папке хелперс класс Helper

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

class Helper {
    public static function translit()
    { ..... }
и вот сам контроллер

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

public function actionCreate()
    {
        $model = new Pages();

        if($model->load(Yii::$app->request->post()))
        {
            $model->alias = Helper::translit();
вопрос заключается вот в чем, я не хочу передавать параметры в методе Helper::translit();
у меня во всех модулях будет одинаковое поле $tmodel->title и $model-alias
как мне в хелпере получить $model->title
ភាសាខ្មែរ Yii2 - это кайф!
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Как передать параметр в helper

Сообщение anton44eg »

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

public static function translit($model) 
так?
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Как передать параметр в helper

Сообщение Akulenok »

я хотел вообще без передачи данных, но в принципе так тоже потянет, спасиб
ភាសាខ្មែរ Yii2 - это кайф!
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Как передать параметр в helper

Сообщение Akulenok »

Сделал так, не знаю нормально так делать или может есть лучше варианты
контроллер

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

if($model->load(Yii::$app->request->post()))
        {
            Helper::translit($model);
            Helper::create_keywords($model);
            Helper::create_descr($model);

            if($model->save())
            {
                Yii::$app->getSession()->setFlash('success', 'Страница успешно добавлена.');
                return $this->redirect(['index']); 
            }
        }
и Helper

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

class Helper {
    public static function translit($model)
    {
        $charset = 'utf-8';
        $replace=array(
        "'"=>"",
        "`"=>"",
        "а"=>"a","А"=>"a",
        "б"=>"b","Б"=>"b",
        "в"=>"v","В"=>"v",
        "г"=>"g","Г"=>"g",
        "д"=>"d","Д"=>"d",
        "е"=>"e","Е"=>"e",
        "ж"=>"zh","Ж"=>"zh",
        "з"=>"z","З"=>"z",
        "и"=>"i","И"=>"i",
        "й"=>"y","Й"=>"y",
        "к"=>"k","К"=>"k",
        "л"=>"l","Л"=>"l",
        "м"=>"m","М"=>"m",
        "н"=>"n","Н"=>"n",
        "о"=>"o","О"=>"o",
        "п"=>"p","П"=>"p",
        "р"=>"r","Р"=>"r",
        "с"=>"s","С"=>"s",
        "т"=>"t","Т"=>"t",
        "у"=>"u","У"=>"u",
        "ф"=>"f","Ф"=>"f",
        "х"=>"h","Х"=>"h",
        "ц"=>"c","Ц"=>"c",
        "ч"=>"ch","Ч"=>"ch",
        "ш"=>"sh","Ш"=>"sh",
        "щ"=>"sch","Щ"=>"sch",
        "ъ"=>"","Ъ"=>"",
        "ы"=>"y","Ы"=>"y",
        "ь"=>"","Ь"=>"",
        "э"=>"e","Э"=>"e",
        "ю"=>"yu","Ю"=>"yu",
        "я"=>"ya","Я"=>"ya",
        "і"=>"i","І"=>"i",
        "ї"=>"yi","Ї"=>"yi",
        "є"=>"e","Є"=>"e"
        );
        $var = preg_replace( "/\s+/ms", "_", $model->title );
        $model->alias = iconv($charset, $charset."//IGNORE", strtr($var, $replace));
    }


    public static function create_descr($model)
    {
        if(!empty($model->description)) return '';

        $var = $model->title . ' ' . $model->full;

        $replace = array( "\x27", "\x22", "\x60", "\t","\n","\r",'"',"'", '\r', '\n', "/", "\\"," ");
        $var = trim(strip_tags($var));
        $var = str_replace($replace, '', $var );
        $model->description = substr(strip_tags(stripslashes($var)), 0, 190);
    }

    public static function create_keywords($model)
    {
        if(!empty($model->keywords)) return '';

        $var = $model->title . ' ' . $model->full;
        $new_array = array();
        $keyword_count = 20;
        
        $replace = array( "\x27", "\x22", "\x60", "\t","\n","\r",'"',"'",",",".", '\r', '\n', "/", "\\","    ");
        $var = trim(strip_tags($var));
        $var = str_replace($replace, '', $var );
        
        $array = explode(" ", $var);
        foreach ($array as $word) 
        {
            if(strlen($word) > 4) $new_array[] = $word;
            if(count($new_array) > 19) { break; }
        }
    
        $model->keywords = implode (", ", $new_array);   
    }
}
вроде все работает.
Если админ не указал дескрипшин или кейвродс то он генерится из титла и текста, если указал то вставляем указанный
ភាសាខ្មែរ Yii2 - это кайф!
IvanChe
Сообщения: 89
Зарегистрирован: 2012.11.25, 18:55

Re: Как передать параметр в helper

Сообщение IvanChe »

Я для себя такие вещи помещаю в модель. Обычно делаю фильтр в валидации для нужных полей, в Вашем случае это alias, keywords, description.
Еще можно в beforeSave поместить. Но я думаю, что в контролере не совсем место для этого. Всё таки сама модель должна заботится о контроле своих данных.
Аватара пользователя
AlexxxT
Сообщения: 59
Зарегистрирован: 2013.02.17, 15:17
Откуда: Kiev

Re: Как передать параметр в helper

Сообщение AlexxxT »

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

public function beforeSave() {
    $this->alias = Helper::translit($this->title);
 
    return parent::beforeSave();
}
 
Почему бы не сделать так?
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Как передать параметр в helper

Сообщение Akulenok »

ага так лучше, спасибо
ភាសាខ្មែរ Yii2 - это кайф!
Ответить