From 97f667bb90b3355b895361ac9a0d30f5af6c17a6 Mon Sep 17 00:00:00 2001 From: Brikou CARRE Date: Sun, 7 Aug 2011 13:14:43 +0200 Subject: [PATCH 1/3] dasheized field name --- .../Form/Extension/Core/Type/FieldType.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php b/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php index 8b4910805bec..d9181a135398 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php @@ -71,6 +71,7 @@ public function buildForm(FormBuilder $builder, array $options) public function buildView(FormView $view, FormInterface $form) { $name = $form->getName(); + $name = $this->robotize($name); if ($view->hasParent()) { $parentId = $view->getParent()->get('id'); @@ -176,4 +177,21 @@ private function humanize($text) { return ucfirst(strtolower(str_replace('_', ' ', $text))); } + + private function robotize($str, $delimiter = '-') + { + $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); + $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); + $clean = strtolower(trim($clean, '-')); + $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); + + // this is used to keep the 1st underscore for _token + // but i guess it would be better to name it "-token" to keep things + // consistent + if ($clean{0} === '-') { + $clean{0} = '_'; + } + + return $clean; + } } From 0eecc4278bf49eabfc80b9c0de71750558e857de Mon Sep 17 00:00:00 2001 From: Brikou CARRE Date: Tue, 9 Aug 2011 10:23:00 +0300 Subject: [PATCH 2/3] fixed --- src/Symfony/Component/Form/Extension/Core/Type/FieldType.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php b/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php index d9181a135398..78c5205c6902 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php @@ -70,8 +70,7 @@ public function buildForm(FormBuilder $builder, array $options) */ public function buildView(FormView $view, FormInterface $form) { - $name = $form->getName(); - $name = $this->robotize($name); + $name = $this->robotize($form->getName()); if ($view->hasParent()) { $parentId = $view->getParent()->get('id'); From 9af78fe4784f2e3fddb57e6eb5c804409d4808f9 Mon Sep 17 00:00:00 2001 From: Brikou CARRE Date: Tue, 9 Aug 2011 17:02:48 +0200 Subject: [PATCH 3/3] fixed duplicates ids --- .../Form/Extension/Core/Type/FieldType.php | 48 +++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php b/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php index 78c5205c6902..bef85578e34f 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/FieldType.php @@ -70,7 +70,37 @@ public function buildForm(FormBuilder $builder, array $options) */ public function buildView(FormView $view, FormInterface $form) { - $name = $this->robotize($form->getName()); + $types = array_map(function($type) { + return $type->getName(); + }, $form->getTypes()); + + if (in_array('radio', $types) || in_array('checkbox', $types)) { + + $slugs = array(); + + foreach (array_keys($view->getParent()->get('choices')) as $value) { + $slug = $this->slugify($value); + $slugs[$slug][] = $value; + } + + $slug = $this->slugify($form->getName()); + + // trick to make the slug unique + if (count($slugs[$slug]) > 1) { + $index = array_search($form->getName(), $slugs[$slug]); + $slug.= ' '.$index; + } + + } else { + $slug = $this->slugify($form->getName()); + } + + // this is used to keep the 1st underscore for _token but i guess it + // would be better to name it "-token" to keep things consistent + if ($slug{0} === '-') { + $slug{0} = '_'; + } + $name = $slug; if ($view->hasParent()) { $parentId = $view->getParent()->get('id'); @@ -82,11 +112,6 @@ public function buildView(FormView $view, FormInterface $form) $fullName = $name; } - $types = array(); - foreach ($form->getTypes() as $type) { - $types[] = $type->getName(); - } - $view ->set('form', $view) ->set('id', $id) @@ -177,20 +202,13 @@ private function humanize($text) return ucfirst(strtolower(str_replace('_', ' ', $text))); } - private function robotize($str, $delimiter = '-') + private function slugify($str, $delimiter = '-') { $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); $clean = strtolower(trim($clean, '-')); $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); - // this is used to keep the 1st underscore for _token - // but i guess it would be better to name it "-token" to keep things - // consistent - if ($clean{0} === '-') { - $clean{0} = '_'; - } - - return $clean; + return rtrim($clean, $delimiter); } }