To extend / replace the Laravel core class, you can create a service provider:
File: app/App/Libraries/Extensions/FormBuilder/FormBuilderServiceProvider.php
<?php namespace App\Libraries\Extensions\FormBuilder; use Illuminate\Support\ServiceProvider as IlluminateServiceProvider; use App\Libraries\Extensions\FormBuilder\FormBuilder; class FormBuilderServiceProvider extends IlluminateServiceProvider { protected $defer = true; public function register() { $this->app->bindShared('formbuilder', function($app) { $form = new FormBuilder($app['html'], $app['url'], $app['session.store']->getToken()); return $form->setSessionStore($app['session.store']); }); } public function provides() { return array('formbuilder'); } }
Create a facade for it:
File: app/App/Libraries/Extensions/FormBuilder/FormBuilderFacade.php
<?php namespace App\Libraries\Extensions\FormBuilder; use Illuminate\Support\Facades\Facade as IlluminateFacade; class FormBuilderFacade extends IlluminateFacade { protected static function getFacadeAccessor() { return 'formbuilder'; } }
This will be your class of service with names:
File: app/App/Libraries/Extensions/FormBuilder/FormBuilder.php
<?php namespace App\Libraries\Extensions\FormBuilder; use \Illuminate\Html\FormBuilder as IlluminateFormBuilder; class FormBuilder extends IlluminateFormBuilder { public function text($name, $value = null, $options = array()) { $options = $options + array('id'=>"field-{$name}"); return $this->input('text', $name, $value, $options); } }
Open app/config/app.php and your service provider in the list
'App\Libraries\Extensions\FormBuilder\FormBuilderServiceProvider',
And replace the Laravel form alias with yours
'Form' => 'App\Libraries\Extensions\FormBuilder\FormBuilderFacade',
For testing, I created a router like this:
Route::any('test', function() { return e(Form::text('first_name')); });
And it gave me this result:
<input id="field-first_name" name="first_name" type="text">