Php 如何在FormType上循环通过Symfony2中的值
我有一段代码:Php 如何在FormType上循环通过Symfony2中的值,php,symfony,Php,Symfony,我有一段代码: ->add('breedingPairSeason', 'choice', array( 'placeholder' => 'Choose a season', 'choices' => array( 'early2010' => 'Early 2010 (Jan - June)', 'late2010' => 'Late 2010 (July - December)', ), )); 我
->add('breedingPairSeason', 'choice', array(
'placeholder' => 'Choose a season',
'choices' => array(
'early2010' => 'Early 2010 (Jan - June)',
'late2010' => 'Late 2010 (July - December)',
),
));
我想实现的是根据年份自动添加更多选择。因此,理想情况下,我希望它在2010年开始,然后在今年结束,如下所示:
->add('breedingPairSeason', 'choice', array(
'placeholder' => 'Choose a season',
'choices' => array(
'early2010' => 'Early 2010 (Jan - June)',
'late2010' => 'Late 2010 (July - December)',
'early2011' => 'Early 2011 (Jan - June)',
'late2011' => 'Late 2011 (July - December)',
'early2012' => 'Early 2012 (Jan - June)',
'late2012' => 'Late 2012 (July - December)',
'early2013' => 'Early 2013 (Jan - June)',
'late2013' => 'Late 2013 (July - December)',
'early2014' => 'Early 2014 (Jan - June)',
'late2014' => 'Late 2014 (July - December)',
'early2015' => 'Early 2015 (Jan - June)',
'late2015' => 'Late 2015 (July - December)',
),
));
# namespace SomeBundle\Form\Type
/**
* Generate a choice array from start year to end year
*
* @param int $startYear The start year
* @param int $endYear If null, current year is taken
* @return array
*/
protected function generateChoices($startYear, $endYear=null)
{
$endYear = $endYear ? $endYear : date('Y');
$years = range($startYear, $endYear);
$choices = array();
foreach($years as $year) {
$choices['early' . $year] = sprintf('Early %d (Jan - June)', $year);
$choices['late' . $year] = sprintf('Late %d (July - December)', $year);
}
return $choices;
}
这可能吗?您可以为枚举创建简单文件,或者在表单中使用私有方法来实现这一点。我将向您展示一个快速的示例,但总的来说,如果您找到更好/更干净的方法,则生成阵列取决于您 假设您在表单类型中创建了一个私有方法:
private function _getSeasonChoices() {
$intervalStart = 2010;
$intervalEnd = (new \DateTime('now'))->format('Y');
$choices = array();
for($year = $intervalStart; $year <= $intervalEnd; $year++) {
$choices[ sprintf('early%d', $year) ] = sprintf('Early %d (January - June)', $year);
$choices[ sprintf('late%d', $year) ] = sprintf('Late %d (July - December)', $year);
}
return $choices;
}
并且您的select输入应该填入正确的值
同样,如果您对这个解决方案不满意,那么生成阵列完全取决于您。希望你有这个想法。我会这样做:
->add('breedingPairSeason', 'choice', array(
'placeholder' => 'Choose a season',
'choices' => array(
'early2010' => 'Early 2010 (Jan - June)',
'late2010' => 'Late 2010 (July - December)',
'early2011' => 'Early 2011 (Jan - June)',
'late2011' => 'Late 2011 (July - December)',
'early2012' => 'Early 2012 (Jan - June)',
'late2012' => 'Late 2012 (July - December)',
'early2013' => 'Early 2013 (Jan - June)',
'late2013' => 'Late 2013 (July - December)',
'early2014' => 'Early 2014 (Jan - June)',
'late2014' => 'Late 2014 (July - December)',
'early2015' => 'Early 2015 (Jan - June)',
'late2015' => 'Late 2015 (July - December)',
),
));
# namespace SomeBundle\Form\Type
/**
* Generate a choice array from start year to end year
*
* @param int $startYear The start year
* @param int $endYear If null, current year is taken
* @return array
*/
protected function generateChoices($startYear, $endYear=null)
{
$endYear = $endYear ? $endYear : date('Y');
$years = range($startYear, $endYear);
$choices = array();
foreach($years as $year) {
$choices['early' . $year] = sprintf('Early %d (Jan - June)', $year);
$choices['late' . $year] = sprintf('Late %d (July - December)', $year);
}
return $choices;
}
关于建筑商:
//...
->add('breedingPairSeason', 'choice', array(
'placeholder' => 'Choose a season',
'choices' => $this->generateChoices(2010)
));
这个问题对我来说不清楚。@felipsmartins我不知道如何把它说清楚。嗯,所以我希望您看到的值在每年的时间里自动添加。从2010年开始,一直到今年,就像你在第二段代码中看到的那样。有可能在Symfony的FormType中运行一个循环来自动更新它吗?是的!这是可能的。看我下面的回答。哦,我记得你: