当前位置: 首页 > 知识库问答 >
问题:

在Laravel Livewire表单提交中,所选选项值始终为空

宋畅
2023-03-14

我对Laravel Livewire还比较陌生,正在努力解决这个问题。我有一个表单,它有一个select输入,在提交时,它会转到Livewire组件的store函数,我希望捕获选中的选项以进一步处理数据。

现在,表单正确呈现;选择输入被动态填充。

>

在第二次提交时,我看到选择输入选择选项被捕获,这是通过“更新”方法进行的,但公共属性仍然为空。对此非常困惑。

如何解决这两个问题?我使用的是Laravel Framework 8.33。1和Livewire v2。4.1.

查看

<form class="edit-profile m-b30" method="POST" wire:submit.prevent="store">
    <div class="row">
        <!-- Your Profile Views Chart -->
        <div class="col-lg-12 m-b30">
            <div class="widget-box">
                <div class="widget-inner">
                    <div class="row">
                        <div class="col-12">
                            <div class="heading-bx left">
                                <h2 class="title-head">Registration</span></h2>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-12">
                            <div class="ml-auto">
                                <h3>Course Details</h3>
                            </div>
                        </div>
                        <div class="form-group col-6">
                            <label class="col-form-label">Select Course</label>
                            <div>
                                <select class="form-control" name="course" wire:model="course">
                                    <option value="">Select Course</option>
                                    @foreach($courses as $course)
                                    <option value="{{ $course->id }}">{{ $course->Name }}</option>
                                    @endforeach
                                </select>
                            </div>
                        </div>
                        <div class="seperator"></div>
                        <div class="col-12">
                            <button class="btn" name="submit" type="submit">Apply</button>
                            <button class="btn-secondry" type="reset">Cancel</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</form>

class ApplyOnlineComponent extends Component
{
    public $courses;
    public $course;

    public function render()
    {
        return view('livewire.apply-online-component')->layout('layouts.base');
    }

    public function resetInputFields()
    {
        $this->reset();
    }

    public function updatedCourse($value)
    {
        $this->course = $value;
        Log::info('Inside updated. Selected course:'.$this->course);
        dd($value); // Works on second submit
    }

    public function mount()
    {
        Log::info('Inside mount');
        $this->courses = Courses::all();
    }

    public function store()
    {
        Log::info('Inside store of online registration. 
            Selected course:'.$this->course); // This always null
    }
}

共有2个答案

督嘉言
2023-03-14

我有类似的问题并解决了它。我认为你们班上的公共$course和你们刀刃上的foreach中的$course有冲突。在foreach ex($item)中为$curse设置另一个名称,然后再次检查。

华炜
2023-03-14

看起来你的代码工作得很好,因为我刚刚复制了你的代码,在日志文件里是这样说的

[2021-07-04 00:01:51] local.INFO: Inside updated. Selected course:3  
[2021-07-04 00:01:54] local.INFO: Inside store of online registration.
            Selected course:3  
[2021-07-04 00:01:59] local.INFO: Inside updated. Selected course:1  
[2021-07-04 00:02:01] local.INFO: Inside store of online registration.
            Selected course:1  
[2021-07-04 00:05:17] local.INFO: Inside mount  
[2021-07-04 00:05:25] local.INFO: Inside updated. Selected course:2  
[2021-07-04 00:05:27] local.INFO: Inside store of online registration.
            Selected course:2  

我甚至用Bootstrap测试过,它也很好,没有任何CSS类丢失。但是我使用了Livewire版本2.5.1和Laravel 8.5。

更新:似乎你放在updatedCourse()中的dd()导致了所有的问题,因为我复制了你的代码,下面是它产生的结果:

[2021-07-04 00:10:15] local.INFO: Inside mount  
[2021-07-04 00:10:18] local.INFO: Inside updated. Selected course:1  
[2021-07-04 00:10:18] local.INFO: Inside store of online registration.
            Selected course:1  
[2021-07-04 00:10:24] local.INFO: Inside mount  
[2021-07-04 00:10:28] local.INFO: Inside updated. Selected course:3  
[2021-07-04 00:10:31] local.INFO: Inside store of online registration.
            Selected course:  
[2021-07-04 00:10:33] local.INFO: Inside updated. Selected course:2  
[2021-07-04 00:10:38] local.INFO: Inside store of online registration.
            Selected course:  
[2021-07-04 00:10:38] local.INFO: Inside store of online registration.
            Selected course:  
[2021-07-04 00:10:42] local.INFO: Inside updated. Selected course:3  
[2021-07-04 00:10:44] local.INFO: Inside store of online registration.
            Selected course:  

试着移除它,看看会发生什么。此外,如果你也显示你的日志文件,那就太好了。

 类似资料:
  • 我有一个表单,其中我将bands表的de id放在一个选择选项中。当我在dropdownlist中选择一个id并尝试提交表单时,该值始终保持为空。如何检索我选择的值? 创造刀身php文件: 我的BandControlers在我的商店行动:

  • 问题内容: 考虑: 提交表单时,如何确保下拉列表中的选定值保持选中状态?此表单位于WordPress(PHP)内部。 问题答案: 为了避免许多if-else结构,让JavaScript自动完成:

  • 返回NULL。在选择JTabbedPane旁边的一个JPanel后直接调用它,这是我能想到的方法返回空组件的唯一原因;因为选项卡已打开但没有焦点。 然而,我需要找到一种方法来获得JTabbedPane中打开的选项卡。 而且,始终返回NULL。有6个标签。 getSelectedIndex()返回了正确的索引,但如果我传入该索引,它仍然表示组件为null。

  • 问题内容: 我正在尝试达到类似于37signals的ta-da列表的效果-我希望我的用户仅通过选中“完成”框即可从列表中检查项目- 换句话说,表单已提交到服务器在复选框上。有谁知道涵盖此类内容的教程,或者可以为我指明正确的方向? 谢谢罗布 问题答案: 如果我正确理解您的问题: 您可以使用jQuery和AJAX完成此操作。在第一个示例中,我无需提交整个表单,而仅提交复选框的值: 大概您会在服务器端处

  • 问题内容: 大家好,我有一个联系表格,验证码在那里。提交表格后,我想保留支票。我发布了文本框值,它显示正确,但复选框不起作用。这是我的代码。 提交表格后如何保留复选框? 问题答案: 更改 至 这将使复选框保持选中状态。

  • 问题内容: 这是形式的字段声明: 我想将初始值设置为,这似乎不起作用。我玩过参数,引号/无引号等,但是没有变化。 如果有可能,谁能给我一个明确的答案?和/或对我的代码段进行必要的调整? 我正在使用Django 1.0 问题答案: 实例化表单时,请尝试设置初始值: