CakePHP 2.0 - 使用带有表单助手的MySQL ENUM字段来创建选择输入

Tom*_*lez 2 cakephp-2.0

我一直在研究,我发现CakePHP的表单助手不能正确解释ENUM字段,所以它只是输出一个文本输入.我找到了一篇建议为特定目的使用助手的帖子.有没有人知道更好的方法来实现这一目标?或者,如果CakePHP开发者打算在某一天纠正这个问题?

谢谢阅读!

zub*_*wka 5

以下是帮助扩展之一.

App::uses('FormHelper', 'View/Helper');
/**
 * APP/View/Helper/MySqlEnumFormHelper.php
 * It extends FormHelper to implement ENUM datatype of MySQL.
 * 
 * http://blog.xao.jp/blog/cakephp/implementation-of-mysql-enum-datatype-in-formhelper/
 *
 * created Oct. 15, 2012
 * CakePHP 2.2.3
 */
class MySqlEnumFormHelper extends FormHelper
{
    public function input($fieldName, $options = array())
    {
        if (!isset($options['type']) && !isset($options['options'])) {
            $modelKey = $this->model();
            if (preg_match(
                    '/^enum\((.+)\)$/ui',
                    $this->fieldset[$modelKey]['fields'][$fieldName]['type'],
                    $m
               )) {

                $match = trim($m[1]);
                $qOpen = substr($match, 0, 1);
                $qClose = substr($match, -1);
                $delimiter = $qOpen . ',' . $qClose;
                preg_match('/^'.$qOpen.'(.+)'.$qClose.'$/u', $match, $m);
                $_options = explode($delimiter, $m[1]);
                $options['type'] = 'select';
                $options['options'] = array_combine($_options, $_options);

            }
        }
        return parent::input($fieldName, $options);
    }
}
Run Code Online (Sandbox Code Playgroud)