Как разбить текст по строчно

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
rusnire
Сообщения: 167
Зарегистрирован: 2015.05.25, 09:51

Как разбить текст по строчно

Сообщение rusnire »

Есть поле textArea - в нем на каждой новой строчке есть текст, мне нужно каждую новую строчку добавить в один массив. Т.е. разбить весь текст в textArea на строки. А далее я уже создам цикл для этого массива, чтобы добавить значения в БД.

Пробовал explode - он просто перенес текст по строкам, но не занес каждый элемент в массив.

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

$arrayMessage = explode("\n", $myText);
            foreach ($arrayMessage as $message) {
                $model->message = $message;
                }
 
Будущее за нами | Спасибо разработчикам yii2 и всему русскому комьюнити по нему
Аватара пользователя
irpsv
Сообщения: 65
Зарегистрирован: 2015.07.07, 18:03
Контактная информация:

Re: Как разбить текст по строчно

Сообщение irpsv »

rusnire писал(а):Есть поле textArea - в нем на каждой новой строчке есть текст, мне нужно каждую новую строчку добавить в один массив. Т.е. разбить весь текст в textArea на строки. А далее я уже создам цикл для этого массива, чтобы добавить значения в БД.

Пробовал explode - он просто перенес текст по строкам, но не занес каждый элемент в массив.

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

$arrayMessage = explode("\n", $myText);
            foreach ($arrayMessage as $message) {
                $model->message = $message;
                }
 
Решение:

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

$array = preg_split('/$\R?^:/m', $input);
Запрос в гугле: php preg_split text to lines
Источник (второй результат в поиске): http://stackoverflow.com/questions/2716 ... line-break
...то что мы не понимаем, делает нас тупее...
rusnire
Сообщения: 167
Зарегистрирован: 2015.05.25, 09:51

Re: Как разбить текст по строчно

Сообщение rusnire »

Дело оказалось не в этом, explode справился. Спасибо за участие.
Будущее за нами | Спасибо разработчикам yii2 и всему русскому комьюнити по нему
rusnire
Сообщения: 167
Зарегистрирован: 2015.05.25, 09:51

Re: Как разбить текст по строчно

Сообщение rusnire »

Не получается сохранить массив значений в БД, делаю так:

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

 
          $model = new Direct();
        $this->performAjaxValidation($model);
        if($_POST['Direct']){
            $arrayTo = explode("\n", $_POST['Direct']['to']);
      
            foreach ($arrayTo as $to) {
                $model->to = $to;
                $model->save();
            }
            if($model->validate() && $model->save()){
                return $this->refresh();
            }
        } 
Сильно не ругайтесь, сохраняется только первое значение массива. Как сделать правильно?
Будущее за нами | Спасибо разработчикам yii2 и всему русскому комьюнити по нему
rusnire
Сообщения: 167
Зарегистрирован: 2015.05.25, 09:51

Re: Как разбить текст по строчно

Сообщение rusnire »

Добавил $model->setIsNewRecord(true);, теперь жалуется на primarykey. Пытался так:$model->isPrimaryKey(NULL); - это как понимаю работало в yii1. Дайте путь хоть в справку.
Будущее за нами | Спасибо разработчикам yii2 и всему русскому комьюнити по нему
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: Как разбить текст по строчно

Сообщение S c »

Ужас. Вы видите что вы просто перезаписываете одно поле в цикле? В итоге в БД остается последнее значение. Во вторых валидацию нужно производить перед сохранением. Если вам нужно $_POST['Direct']['to'] записать в виде N записей в БД - вам нужно, напимер, каждый раз создавать новую модель в цикле.
Аватара пользователя
irpsv
Сообщения: 65
Зарегистрирован: 2015.07.07, 18:03
Контактная информация:

Re: Как разбить текст по строчно

Сообщение irpsv »

rusnire писал(а):Добавил $model->setIsNewRecord(true);, теперь жалуется на primarykey. Пытался так:$model->isPrimaryKey(NULL); - это как понимаю работало в yii1. Дайте путь хоть в справку.
Такой вопрос: а что нужно сделать? Если сохранить все строчки в базе, то как то так:

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

<?php

$this->performAjaxValidation($model);

if($_POST['Direct']) {
    $arrayTo = explode("\n", $_POST['Direct']['to']);
    foreach ($arrayTo as $to) {
        $model = new Direct();
        $model->to = $to;
        $model->save();
        //
        // вот этот блок я не понимаю зачем нужен, если каждая строчка это отдельная модель
        // и еще такой момент: метод save() сам проводит валидацию, так что в условии можно записать так:
        //
        // if($model->save()){
        // 
        if($model->validate() && $model->save(false)){
            return $this->refresh();
        }
    }
}  
...то что мы не понимаем, делает нас тупее...
Ответить