我有一个在传递给视图之前在控制器中生成的表单:
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
如果我使用刀片模板在视图上创建表单,则会解决此问题。但是,我不希望在我的观点中拥有表格的所有逻辑。
答案 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
)。