解决自定义表单类型的query_builder中的选项

时间:2019-08-04 09:29:31

标签: symfony

我正在开发从EntityType继承的自定义表单类型,它具有一个必需的选项,该选项将在query_builder中使用。如何获得已解决的值?

class MealPlanType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'class' => MealPlanHotel::class,
            'query_builder' => function(EntityRepository $er) use($resolver) {
                return $er->createQueryBuilder('meals')
                   **// Need to get hotel passed in form builder here**
                   // ->where('meals.hotel = :hotel')->setParameter('hotel', $hotel)
                    ->orderBy('meals.sortIndex', 'ASC');
            },

        ]);

        $resolver->setRequired(['hotel']);
    }

    public function getParent()
    {
        return EntityType::class;
    }
}

1 个答案:

答案 0 :(得分:0)

经过一番试验,我找到了解决该问题的方法:

class UserProfileSrializer(serializers.Serializer):

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop("user", None)
        serializers.Serializer.__init__(self, *args, **kwargs)


    boats = serializers.SlugRelatedField(many=True, source="boatmodel_set", slug_field="boat_name",
                                         read_only=True)
    articles = serializers.StringRelatedField(many=True, source="article_set", read_only=True)
    comment = serializers.StringRelatedField(many=True, source="get_comments", read_only=True)


    def get_boats(self, obj):
        # access the boats like this
        boats = obj.boats
        boats_limited = ... # limit your boats here
        return boats_limited


    def get_articles(self, obj):
        # access the articles like this
        articles = obj.articles
        articles_limited = ... # limit your articles here
        return articles_limited

您需要将带有Options参数的函数发送到query_builder,选项将填充在函数内部。