2017-04-12 19 views
0

讓我們考慮一個像下面這樣的場景:根據項目狀態處理symfony表單中的下拉項目的最佳方式是什麼?

實體車有多對多CarType這是一個不同類型的列表,每種類型可以是活動的或不活動的。

汽車形式:

$builder->add('type', 'entity', array(
      'label'   => 'Car Type', 
      'class'   => 'SomeBundle:CarType', 
      'query_builder' => function (EntityRepository $er) { 
       $qb = $er->createQueryBuilder('type') 
         ->where('type.status = :status') 
         ->setParameter('status', 'active') 
       ; 
       return $qb; 
      } 
     )); 

在創建階段,用戶創建Car與活性Type。假設我有一個管理頁面來標記Type活動/不活動。

處理Car編輯階段與非活動Type有什麼關係的最佳方法是什麼?換句話說,如果某個Car與任何Type都有關係,並且該關聯在某個時間點處於活動狀態,並且不再處於活動狀態,則該選擇不會顯示在下拉列表中。

處理這樣的用例的最佳方式是什麼dropdwon項目可以在不同的時間框架中具有不同的狀態,但查詢只返回活動的?

一種方法是提醒用戶Car正在使用一些不活動的Type,但還有其他更好的方法嗎?

+0

想想現實世界中非活動類型意味着什麼。是否有意義(在您的應用程序的域中)讓汽車在創建後更改它的類型?如果答案是否定的,也許你不應該在編輯時渲染'type'字段。如果答案是肯定的,那麼您預計會發生那些現在有不活動類型的汽車嗎?很多時候,稱爲「類型」的屬性表示不良的面向對象設計,也許你應該有像「轎車」,「敞篷車」等實體... –

+0

@RenanTaranto如果管理員創建一輛車,請輸入錯字。他不能改變車的類型? – goto

+0

@goto其實他的問題是關於如何在普通用戶的角度處理它,而不是管理員。我的意思是,爲了實現這些場景的良好解決方案,我們應該分析應用程序中的每個實體上下文。這個問題沒有最終的單一答案。 –

回答

0

您的CA解決在管理層面的問題 (就像你不能使失活的carType如果他繼續使用)

或者你的用戶級別處理它:
您提出只有主動選擇汽車+不活躍的當前用戶選擇。
這樣,用戶只能選擇轉變爲主動型轎車或保持它的過時類型

$qb = $er->createQueryBuilder('type') 
    ->where('type.status = :status') 
    ->orWhere('id = :currentTypeId') 
    ->setParameter('currentTypeId', $someId) 
    ->setParameter('status', 'active') 

;

相關問題