我有一个现有的发票库存跟踪应用程序,我需要重构。
我们需要创建一个表单来创建。根据所选的类型,我们必须在创建表单中显示某个类型的一些字段,并为其他类型隐藏它们。
以前的开发人员已经为每种类型创建了单独的表单,并且相同的输入表单代码会为每种类型的文档重复一遍又一遍。代码庞大且难以维护,我必须修复它并使其更简单。
该应用程序具有表document_type
和document
。
单据类型表包含单据类型,如:
1.发票
1.亲发票
1.要约
1.客户订单
1.向供应商订购
1.内部仓库转移
1.批发发票
每种类型在表单中包含几乎相同的字段,只有在某些类型中,我们必须隐藏供应商输入,仓库选择,价格输入等字段。
我们希望使用单一表单来创建此数据。根据所选的document_type,显示发票的特定字段,但隐藏发票中显示的某些字段。
我的问题是为每个文档类型创建一个单独的控制器,我将传递document_type_id并在刀片中确定将显示哪些文件。还是为所有文档类型创建字段集合?
1.创建InvoiceController、ProInvoiceController、OfferController等。
1.在每个控制器中定义文档type_id
1.创建唯一的窗体,我将在其中处理
示例
<?php
class InvoiceController extens Controller
{
private $this->document_type = 4; // Invoice type
public function crate()
{
$invoices = Document::where('document_type_id', $this->document_type)->get();
// etc..
return view('admin.document.index',[
'title' => 'Invoice',
'invoices' => $invoices,
]);
}
// other controllers
class OfferController extens Controller {}
class ProInvoiceController extens Controller {}
?>
Form.blade.php
<!-- Invoice-->
@if($document_type_id == 1)
<input type="text" name="customer">
<input type="text" name="price">
<select type="text" name="delivery_id"></select>
<!-- Offer -->
@elseif($document_type_id == 2)
<input type="text" name="comercial_customer">
<input type="text" name="price">
<select type="text" name="delivery_id"></select>
<!-- Internal warehouse transfer -->
@elseif($document_type_id == 2)
<select type="text" name="wharehouse_from_id"></select>
<select type="text" name="wharehouse_from_to"></select>
@else
<!-- Show default -->
@endif
有谁知道最好的方法吗?
1条答案
按热度按时间kg7wmglp1#
我将在每个控制器中创建一个必需字段部分的数组,然后在单个表单模板中显示/隐藏相关的表单部分,而不是文档类型。
可以将字段数组传递给视图,也可以将对控制器的引用传递给视图;
然后在视图中访问任何控制器属性或方法。
我也会有相同的表单用于编辑和创建,然后使用$model-〉exists()来测试这是一个创建表单还是编辑表单,以便可以相应地调整表单路由和方法(参见https://talltips.novate.co.uk/laravel/simplify-laravel-crud-controllers),其中将空模型传递给视图可以大大简化CRUD表单。