Laravel 4:提交<option> Value To Controller </option>

时间:2014-09-22 16:38:59

标签: laravel-4

我有一个在传递给视图之前在控制器中生成的表单:

public function displayUsers(){
    $html = "";

    //get all users
    $users = $this->entityManager->getRepository('User')->findBy(array(), array('last_name'=>'ASC')); 
    if($users){
        $html .= '<h3>Permissions By User</h3>';
        $html .= '<select class="form-control" id="permissions-username">';
        foreach($users as $user){
            $html .= '<option value="'.$user->getId().'">'.$user->getLastName().', '.$user->getFirstName().'</option>';
        }
        $html .= '</select>';
    }
    return View::make('admin')->with('output', $html);  
}

然后在“管理员”视图中,我有以下内容来显示表单:

{{ Form::open(array('route'=>'permissions.edit', 'method' => 'GET')) }}
        <div class="form-group">
            @if($output)
                {{ $output }}
            @endif
        </div>
        {{ Form::submit('Edit User', ['class'=>'btn btn-warning btn-sm', 'name' => 'edit_user', 'title'=>'Edit User']) }}
{{ Form::close() }}

当我将此表单提交给控制器时,所选选项的值不会被结转。 permissions.edit函数的输出最终为:

{"edit_user":"Edit User"}

生成的网址为:

*(BASE)*/permissions/%7Bpermissions%7D/edit?edit_user=Edit+User

如果我使用刀片模板在视图上创建表单,则会解决此问题。但是,我不希望在我的观点中拥有表格的所有逻辑。

1 个答案:

答案 0 :(得分:1)

这是因为你的select没有名字,现在就像下面的geven一样:

<select class="form-control" id="permissions-username">

为其分配name,例如:

<select name="permissions_username" class="form-control" id="permissions-username">

每个表单元素都必须有一个名称,否则您无法在服务器端访问它们。所以,现在你可以使用类似的东西(在Laravel的情况下)访问服务器上的那个元素(在你的脚本中):

$permissions_username = Input::get('permissions_username');

否则(使用Vanilla PHP)您可以使用:

$permissions_username = $_GET['permissions_username'];

因为您在表单中使用了GET方法。因此,无论您使用什么,都需要为表单的元素指定一个名称,这是必要的(即使有或没有Laravel)。