2016-08-31 6 views
0

Я использую Laravel 4.2. У меня есть метод для хранения файлов, и я пытаюсь нажать элементы в массиве сеансов. Каждый раз, когда пользователь нажимает кнопку, я хочу сохранить эти имена файлов в массиве сеансов с именем, а позже я должен их получить.Как добавить элементы в массив сеансов Laravel

Я пытаюсь с помощью следующего кода:

$name = Input::get('name'); 
 
$input = Input::all(); 
 
foreach ($input[$name] as $key => $corporate) { 
 

 
    $file_name = $key.'_'.$current_time . '_' . $corporate->getClientOriginalName(); 
 
    //code for uploading files 
 
    if(Session::has($name)) { 
 
    Session::push($name.".".$key, $file_name); //I want to add new items in this array 
 
    } else { 
 
    Session::put($name, $file_name); //for first image 
 
    } 
 

 

 
}

Как я прочитал из Laravel документы:

протолкнуть Значение Onto Массив Session Значение

Сессия :: push ('user.teams', 'developers');

); `

Но это не добавляет новые элементы в массив, он переписывает его.

После первой загрузки изображений в массиве сеанса у меня есть:

["director_front_passport[]"]=> 
 
    array(1) { 
 
    [1]=> 
 
    array(1) { 
 
     [0]=> 
 
     string(54) "0_1472669237_12894473_678457885627912_1258115018_o.jpg" 
 
    } 
 
    }

После загрузки второго изображения, сеанс:

["director_front_passport[]"]=> 
 
    array(1) { 
 
    [2]=> 
 
    array(1) { 
 
     [0]=> 
 
     string(33) "0_1472669255_animated_loading.gif" 
 
    } 
 
    }

Каков правильный способ перетаскивания элементов в массиве сеансов с определенным именем, я имею в виду, что я должен получить эти элементы позже, используя: Session :: get ('name'), например.

ответ

1

Вы можете попробовать следующий код:

$name = Input::get('name'); 
$input = Input::all(); 
$items = Session::get($name, []); 
foreach ($input[$name] as $key => $corporate) { 
    $file_name = $key.'_'.$current_time . '_' . $corporate->getClientOriginalName(); 
    if (!array_key_exists($key, $items)) { 
     $items[$key] = []; 
    } 
    $items[$key][] = $file_name; 
} 
Session::put($name, $items); 
+0

Я использую этот метод, когда я должен добавить новый элемент в существующий массив сессии. Вот почему мне нужна эта проверка, если у меня есть сеанс - if (Session :: has ($ name)) { Session :: push ($ name. ".". $ Key, $ file_name); } else { Session :: put ($ name, $ file_name); –

+0

Но если вы храните несколько элементов в одном и том же сеансовом ключе, имеет смысл хранить массив элементов. Наличие одного элемента на нескольких одинаковых адресах ('name', 'name0', 'name1' и т. Д.) Не так чисто, как наличие 'Session :: get ('name') = [item0, item1, item2, ...] ' – jcorry

+0

Мой код будет вызывать элемент, если он не существует после цикла. Я не могу проверить свою локальную машину. Но было бы полезно, если вы напечатаете результат и сообщите, что не так. –

Смежные вопросы