Sorununu yeni anladım ve şöyle bir örnek yaptım.
Route::any('test',function(){
$list = array(
'1' => 'item 1',
'2' => 'item 2',
'3' => 'item 3',
'4' => 'item 4',
'5' => 'item 5',
'6' => 'item 6',
'7' => 'item 7',
);
echo Form::open();
?>
<div class="control-group {{ $errors->has('category_id') ? 'error' : '' }}">
<label class="control-label" for="categories">Category</label>
<div class="controls">
<?php echo Form::select('categories[]',$list, Input::get('categories'),array('multiple' => 'multiple', 'class' => 'span10', 'size' => '10','id' => 'blabla')); ?>
{{ $errors->first('category_id', '<span class="help-inline">:message</span>') }}
</div>
</div>
<?php
echo Form::submit('asd');
echo Form::close();
});
ben de istediğin sonucu veriyor ancak senin kodların da, select adı olarak
categories[] kullanılmış ancak selected kontrolün de inputtan
category_id çağırıyorsun, seçilileri kontrol ederken de
categories[] çağırmalısın ve başka bir döngü/fonksiyon yardımı ile seçililerin bulunduğu array'ın içinden seçili mi değil mi kontrol etmelisin. "input::get('categories',array());"
Sonuçta multi select kullanmışsın ama seçili id kontrolünü tek iteme
Input::old('category_id') bağlamışsın. Hem ortada öyle bir form alanı ve değeri yok, hem de burada da category arrayın da ki verileri select e eklerken bütün id ler değişiyor ama senin kontrol ettiğin id category_id olarak bir tane, öyle bir değer olsa bile 1 item seçili olur senin form hatalı çalışır. Ayrı bir döngü ile seçilileri kontrol etmen gerekirdi. çünkü çoklu seçim söz konusu.
Senin kullanımına uygun bir fonksiyon yazar ve kullanırsak şöyle olmalıydı.
function check_selected($array,$id) {
foreach($array as $item) {
if($item->id == $id) return true;
}
return false;
}
kullanımı ise;
<option value="{{$category->id}}" {{ check_selected(Input::get('categories',array()),$category->id) ? 'selected="selected"' : '' }}>{{$category->name}}</option>
Yine de Form::select kullanmanı öneririm.
Not: Input::get('categories',array()) bölümün de array() ı öyle bir değer yoksa, yani sayfa post edilmediyse php'nin bize kızmaması için yazıyor ve boş bir array'ı tedbir amaçlı tanımlıyorum. Eğer o tanımlamayı yapmazsam php sinirlenir ve "Undefined variable" hatası verebilir, eşşeği sağlam kazığa bağlayalım
Not: Eksik ve hatalarım için kusura bakmayın.