【发布时间】:2013-07-01 09:41:18
【问题描述】:
我想调整 Laravel 4 中的 Illuminate\Html\FormBuilder 类,以自动在每个输入中包含一个 CSS 类,对应于输入的类型,例如
我创建了自己的类,它扩展了原来的类:
namespace Shady;
class FormBuilder extends Illuminate\Html\FormBuilder {
public function input($type, $name, $value = null, $options = array()) {
$options['class'] = isset($options['class'])
? implode(' ', array_unique(array_merge(array($type), explode(' ', $options['class']))))
: $type;
parent::input($type, $name, $value, $options);
}
}
现在的问题是,如何让 Laravel 4 使用它?
我查看了 app/config/app.php,其中只有一个对 HTML Fascade 类的引用。我不确定它如何或在何处转换为 Illuminate\Support\ServiceProvider\HtmlServiceProvider 类,但该类硬编码 FormBuilder 类,ala
protected function registerFormBuilder()
{
$this->app['form'] = $this->app->share(function($app)
{
$form = new FormBuilder($app['html'], $app['url'], $app['session']->getToken());
return $form->setSessionStore($app['session']);
});
}
我想知道我是否可以欺骗它以某种方式加载我的课程版本?或者,如果没有,我还能如何顺利、整齐地添加此功能?干杯。
【问题讨论】:
-
当您可以轻松地使用 CSS 选择器找到这些类型的输入时,似乎需要做很多额外的工作才能让它工作。 真的有必要吗?
-
在这种情况下,我是个白痴,没有意识到 CSS 选择器可以做到这一点(当你退出开发 18 个月时会发生这种情况)。但作为一个原则,我想知道它是如何完成的,所以我也可以为其他事情做。干杯
-
在框架的那个级别,我认为您不想覆盖任何方法。相反,使用
HTML::macro()定义您自己的方法。希望这会有所帮助!