2013-03-12 12 views
12

Đối với việc tạo ra một danh sách thả xuống với một mục bằng cách chọn mặc định, sau đây được thực hiện:Bắt chọn giá trị từ một hình thức nhiều lựa chọn trong Laravel

echo Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), 'S'); 

Vì vậy, tôi tạo ra một danh sách thả xuống mà có nhiều hơn một mục được chọn theo mặc định, theo cách sau:

echo Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), array('S', 'M'), array('multiple')); 

Nhưng làm cách nào để nhận được nhiều giá trị được chọn?

Input::get('size') chỉ trả về chuỗi được chọn cuối cùng.

Trả lời

35

Trước tiên, nếu bạn muốn có nhiều mục được chọn theo mặc định, bạn phải cung cấp một mảng giá trị làm thông số thứ 3, không phải là giá trị đơn giản.

dụ:

Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), array('S', 'M'), array('multiple')); 

nên hiển thị các lựa chọn với S và M được chọn.

Đối với các điểm thứ hai, bạn nên cố gắng để cung cấp cho một cái tên như size[] thay vì size, nó có thể giải quyết vấn đề (vì bạn được đăng chọn không phải là một giá trị đơn giản, một mảng của các giá trị)

+7

Cảm ơn câu trả lời. Sử dụng 'size []' thay vì 'size' đã làm những gì tôi đã dự định. – SUB0DH

13

thông thường Chọn câu lệnh đi

<select name="select_name" id="select_name" multiple="multiple"> 

Và luồng công việc là Laravel lấy các phần tử biểu mẫu theo tên của chúng. Để làm cho nó hoạt động, hãy đổi tên thành một mảng.

<select name="select_name[]" id="select_name" multiple="multiple"> 

Điều này sẽ làm cho laravel nhận được giá trị được chọn làm mảng dữ liệu.

1

Theo với https://laravelcollective.com/docs/5.2/html#drop-down-lists

Form::select('size[]',['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], ['S', 'M'], ['multiple' => 'multiple', 'class' => 'form-control']); 

Bằng cách này, xin vui lòng nhận thấy tên thả xuống của (kích thước []) nếu bạn muốn để có thể sử dụng lĩnh vực này như mảng trong backend của bạn.

Mọi thứ trở nên phức tạp khi bạn muốn sử dụng các mối quan hệ như giá trị, ví dụ

models 
user => common fields 
size => id, name, slug [ 
         {id : 1 , name : Large, slug : L}, 
         {id : 2 , name : Small, slug : S}, 
         {id : 3 , name : Medium, slug : M} 
         ] 

user_size => id, user_id, size_id [ 
            {id :1, user_id:1, size_id:1} 
            {id :2, user_id:1, size_id:3} 
            ] 

Vì vậy $user->colors sẽ trở lại một cái gì đó giống như

laravel collection 

[ 
    USER_SIZE => [ 'user_id' => 1 , size_id' => 1 ], 
    USER_SIZE => [ 'user_id' => 1, 'size_id' => 3 ] 
] 

Bạn có thể làm một cái gì đó như thế nào, nhớ User Model có một sizes mối quan hệ từ một đến nhiều với SIZE Model

Form::select('size[]',['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], $user->sizes->pluck('size')->pluck('slug')->toArray(), ['multiple' => 'multiple', 'class' => 'form-control']); 

Hy vọng điều này sẽ giúp