在表单上重复表单域

Chr*_*her 1 php laravel laravel-4

我是 Laravel 的新手,并试图了解如何允许用户重复字段。

我有一个表单,允许用户创建一个具有标题和描述的基本页面,如果用户选择使用“添加更多”按钮创建另一个标题和描述字段,我想允许用户这样做。

它们允许他们重新排序这些字段集合。

干杯,克里斯

aow*_*ie1 5

这似乎不是关于 Laravel,而是关于一般的 DB Schema、PHP 和 UI 实践。因此,由于这需要广泛的答案,我将主要使用最佳实践概念来回答,以避免过于冗长(使用 Laravel 作为上下文)。

前端

为了能够动态添加另一组字段,您需要使用表单数组:

<div class="field-set">
{{ Form::text('fields[0]["title"]', Input::old('fields[0]["title"]')) }}
{{ Form::textarea('fields[0]["description"]', Input::old('fields[0]["description"]')) }}
</div>

<a href="#" class="add-more-link">+ Add more</a>
Run Code Online (Sandbox Code Playgroud)

您的“添加更多链接”应该有一个 javascript 触发器,该触发器将复制并附加“字段集”元素以及表单数组中索引的迭代

(e.g. fields[1]["title"], fields[2]["title"]) 
Run Code Online (Sandbox Code Playgroud)

注意:您可以在没有 JS 的情况下执行此操作,但您必须使用一些参数重新发布页面,这些参数会增加要创建的字段数量,然后在 DOM 生成时渲染字段集时循环多次。

为了允许重新排序,我推荐jQuery UI 的 Sortable。注意:您也可以在没有 JS 的情况下通过为每个字段集 POST 向上或向下增量来完成此操作,但需要在后端进行更多处理。


后端

在您处理保存的模型中,通过 Input::get('fields') 获取数据会将其存储到一个 PHP 数组中,您可以遍历该数组以验证、解析和存储数据。

至于您的数据库架构,您需要考虑创建任意数量的新字段。这意味着可能需要一个单独的表来连接用户。(列:id、user_id、title、description)

在 Laravel 中,您可以在用户模型上定义一个 Has Many Relationship,它将获取任何给定用户的所有标题和描述。 http://laravel.com/docs/eloquent#relationships