2014-02-20 4 views
0

Я пытаюсь сделать выпадающий список в Laravel с вариантами выбора, являющимися значениями из моей базы данных, и у меня есть некоторые проблемы. В других руководствах на этом сайте, выпадающий список запрашивает создание моделей для вашей базы данных. Я не создал классы моделей, и я не собираюсь.Строка выпадающего списка в Laravel (без моделей)

routes.php

Route::get("/user/charname", array(
    'as' => 'profile-character', 
    'uses' => '[email protected]' 
)); 

ProfileController.php

class ProfileController extends BaseController 
{ 
    public function dropDownList() 
    { 
     $list = DB::table('characters')->where('char_id', '128')->pluck('char_name'); 
     return View::make('layout.profile')->with('character_options',$list); 
    } 
} 

В profile.blade.php (вид)

<div class="selected_char"> 
    <form action="{{ URL::route('profile-character') }}" method="post"> 
     <li> 
      {{ Form::select('character_options', $list ,Input::old('character_options')) }} 
     </li> 
    </form> 
</div> 

Делая это он говорит, что $ список из мой взгляд не определен. Где определить список $ в представлении и как я несу список $ от моего контроллера к View, потому что эта линия не кажется, что делает его работу

return View::make('layout.profile')->with('character_options',$list); 

ответ

1

Вы должны использовать $character_options не $list в представлении ,

+0

Я сделал необходимое изменение в моем коде с {{Форма :: выберите ('character_options', $ character_options, входные :: старые ('character_options'))}}. Это имеет смысл, что вы говорите, но я не понимаю, почему он все еще не работает. Теперь он говорит, что character_options - неопределенная переменная в profile.blade.php –

1

Фактически вы указываете, что переменная должна быть «character_options» в вашем вызове View::make(), поэтому вам нужно обратиться к ней как $character_options.

Кроме того, ->lists('char_name') лучше, чем с использованием ->pluck('char_name'), поскольку он предоставит вам полный список. Pluck просто возвращает первый найденный элемент.

Кроме того, используя ->lists('char_name', 'id'), вы получите список, на который ссылается столбец id, что было бы полезно, если бы вы использовали этот список для определения идентификаторов для поля внешнего ключа. Но нет ничего хорошего, если нет.

+0

Что-то вроде {{Form :: select ('character_options', $ character_options, Input :: old ('character_options'))}} в моем представлении? –

+0

Да, это звучит разумно для меня, но из-за внешнего вида ваших других комментариев, которые не работают на вас. Если вы действительно вставили упрощенную версию своего контроллера или кода просмотра, вы могли бы попытаться дать более подробную информацию - возможно, что-то мешает доступной переменной, но мы не можем ее увидеть из-за того, что вы сократили код для краткости. Возможно, кипятите ваш контроллер и взгляните на простейшую форму и проведите свой путь вверх - вы обычно увидите одну крошечную проблему, которая вызвала большую проблему. – alexrussell

0

я частично решить проблемы, делая это, на мой взгляд:

{{ Form::select('list', DB::table('characters')->where('char_id', '128')->lists('char_name') ,Input::old('list')) }} 

Лично я не вижу его в качестве жизнеспособного решения, но временный один

{{Form :: выберите ('character_options', $ character_options, Input :: старые ('character_options'))}}

Ошибка: неопределенная переменная character_options

{{Form :: выберите ('character_opt Ионы ', $ list, Input :: old (' character_options '))}} Ошибка: неопределенный список переменных

Возможно, я не понимаю, как отправить переменную из контроллера в Вид.

0

Вам необходимо использовать lists, как упомянуто @alexrussel. Обратите внимание, что View::make('layout.profile')->with('character_options',$list);, здесь вы передаете переменную $character_options со значением, содержащимся в $list, и $list больше не будут доступны для просмотра.

ProfileController.php

<?php 

class ProfileController extends BaseController 
{ 
    public function dropDownList() 
    { 
     $list = DB::table('characters')->where('char_id', '128')->lists('char_name'); 
     return View::make('layout.profile')->with('character_options',$list); 
    } 
} 

profile.blade.PHP

<div class="selected_char"> 
<form action="{{ URL::route('profile-character') }}" method="post"> 
    <li> 
     {{ Form::select('character_options', $character_options ,Input::old('character_options')) }} 
    </li> 
</form> 

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