JSON格式字段处理
<h1>JSON格式字段处理</h1>
<p><code>dcat-admin</code>的表单提供了下面几个组件来处理<code>JSON</code>格式的字段,方便用来处理<code>JOSN</code>格式的对象、一维数组、二维数组等对象。</p>
<h2>键值对象 (keyValue)</h2>
<p><img src="{{public}}/assets/img/screenshots/key-value.png" alt="" /></p>
<p>如果你的字段存储的是不固定<code>键</code>的<code>{&quot;field&quot;:&quot;value&quot;}</code>格式,可以用<code>keyValue</code>组件:</p>
<pre><code class="language-php">$form-&gt;keyValue('column_name');
// 设置校验规则
$form-&gt;keyValue('column_name')-&gt;rules('required|min:5');</code></pre>
<p>自定义键名以及键值标题翻译</p>
<pre><code class="language-php">$form-&gt;keyValue(...)-&gt;setKeyLabel('键名')-&gt;setValueLabel('键值');</code></pre>
<h2>固定键值对象 (embeds)</h2>
<p><img src="{{public}}/assets/img/screenshots/embeds.png" alt="" /></p>
<p>用于处理<code>mysql</code>的<code>JSON</code>类型字段数据或者<code>mongodb</code>的<code>object</code>类型数据,也可以将多个<code>field</code>的数据值以<code>JSON</code>字符串的形式存储在<code>mysql</code>的字符串类型字段中</p>
<p>适用于有固定键值的<code>JSON</code>类型字段</p>
<pre><code class="language-php">$form-&gt;embeds('column_name', function ($form) {
$form-&gt;text('key1')-&gt;required();
$form-&gt;email('key2')-&gt;required();
$form-&gt;datetime('key3');
$form-&gt;dateRange('key4', 'key5', '范围')-&gt;rules('required');
})-&gt;saving(funtion ($v) {
// 转化为json格式存储
return json_encode($v);
});
// 自定义标题
$form-&gt;embeds('column_name', '字段标题', function ($form) {
...
});</code></pre>
<p>回调函数里面构建表单元素的方法调用和外面是一样的。</p>
<h2>一维数组 (list)</h2>
<p><img src="{{public}}/assets/img/screenshots/form-list.png" alt="" /></p>
<p>如果你的字段是用来存储<code>[&quot;foo&quot;, &quot;Bar&quot;]</code>格式的一维数组, 可以使用<code>list</code>组件:</p>
<pre><code class="language-php">$form-&gt;list('column_name');
// 设置校验规则
$form-&gt;list('column_name')-&gt;rules('required|min:5');
// 设置最大和最小元素个数
$form-&gt;list('column_name')-&gt;max(10)-&gt;min(5);</code></pre>
<h2>二维数组 (table)</h2>
<p><img src="{{public}}/assets/img/screenshots/form-table.png" alt="" /></p>
<p>如果某一个字段存储的是<code>json</code>格式的二维数组,可以使用<code>table</code>表单组件来实现快速的编辑:</p>
<pre><code class="language-php">$form-&gt;table('column_name', function ($table) {
$table-&gt;text('key');
$table-&gt;text('value');
$table-&gt;textarea('desc');
})-&gt;saving(function ($v) {
return json_encode($v);
});</code></pre>
<p>这个组件类似于<code>hasMany</code>组件,不过是用来处理单个字段的情况,适用于简单的二维数据。</p>
<h2>二维数组 (array)</h2>
<p><img src="{{public}}/assets/img/screenshots/has-many.png" alt="" /></p>
<p>如果某一个字段存储的是<code>json</code>格式的二维数组,并且字段比较多,可以使用<code>array</code>表单组件来实现快速的编辑:</p>
<pre><code class="language-php">$form-&gt;array('column_name', function ($table) {
$table-&gt;text('key');
$table-&gt;text('value');
$table-&gt;textarea('desc');
})-&gt;saveAsJson();</code></pre>