<?php
namespace Cms\ModuleBundle\Form;
use Cms\ModuleBundle\Entity\StandardMetadata;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
/**
* Class StandardMetadataType
* @package Cms\ModuleBundle\Form
*/
class StandardMetadataType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TextType::class, array(
'required' => false,
'label' => 'Page title',
'helpText' => true,
'attr' => [
'placeholder' => $options['placeholderTitle'],
],
))
->add('description', TextareaType::class, array(
'required' => false,
'label' => 'Page description',
'helpText' => true,
))
->add('keywords', TextType::class, array(
'label' => 'Page keywords',
'required' => false,
'helpText' => true,
))
->add('robots', ChoiceType::class, array(
'required' => false,
'label' => 'Search robots',
'multiple' => false,
'helpText' => true,
'empty_data' => null,
'placeholder' => 'All - Index this page and follow links (default)',
'choices' => [
'None - Do not index or follow links on this page' => 'noindex,nofollow',
'No Index - Do not index this page' => 'noindex',
'No Follow - Do not follow links on this page' => 'nofollow',
],
/*
'choice_label' => function ($choice, $key, $value) {
return sprintf(
'app.cms.module.standard_metadata.robots.%s',
$choice
);
},
*/
))
;
$builder->get('keywords')->addModelTransformer(new CallbackTransformer(
function ($original) {
return is_null($original) ? '' : implode(', ', $original);
},
function ($submitted) {
return array_map(
function ($value) {
return trim($value);
},
( ! is_string($submitted)) ? [] : explode(',', $submitted)
);
}
));
$builder->get('robots')->addModelTransformer(new CallbackTransformer(
function ($original) {
return is_null($original) ? '' : implode(',', $original);
},
function ($submitted) {
return array_map(
function ($value) {
return trim($value);
},
( ! is_string($submitted)) ? [] : explode(',', $submitted)
);
}
));
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'categoryName' => 'Metadata',
'embedded' => true,
'data_class' => StandardMetadata::class,
'placeholderTitle' => null,
));
}
}