public function register()
{
//include our view composers, and routes to avoid issues with catch-all routes defined by users
include __DIR__ . '/../../viewComposers.php';
include __DIR__ . '/../../routes.php';
//the admin validator
$this->app['admin_validator'] = $this->app->share(function ($app) {
//get the original validator class so we can set it back after creating our own
$originalValidator = LValidator::make(array(), array());
$originalValidatorClass = get_class($originalValidator);
//temporarily override the core resolver
LValidator::resolver(function ($translator, $data, $rules, $messages) use($app) {
$validator = new Validator($translator, $data, $rules, $messages);
$validator->setUrlInstance($app->make('url'));
return $validator;
});
//grab our validator instance
$validator = LValidator::make(array(), array());
//set the validator resolver back to the original validator
LValidator::resolver(function ($translator, $data, $rules, $messages) use($originalValidatorClass) {
return new $originalValidatorClass($translator, $data, $rules, $messages);
});
//return our validator instance
return $validator;
});
//set up the shared instances
$this->app['admin_config_factory'] = $this->app->share(function ($app) {
return new ConfigFactory($app->make('admin_validator'), LValidator::make(array(), array()), config('administrator'));
});
$this->app['admin_field_factory'] = $this->app->share(function ($app) {
return new FieldFactory($app->make('admin_validator'), $app->make('itemconfig'), $app->make('db'));
});
$this->app['admin_datatable'] = $this->app->share(function ($app) {
$dataTable = new DataTable($app->make('itemconfig'), $app->make('admin_column_factory'), $app->make('admin_field_factory'));
$dataTable->setRowsPerPage($app->make('session.store'), config('administrator.global_rows_per_page'));
return $dataTable;
});
$this->app['admin_column_factory'] = $this->app->share(function ($app) {
return new ColumnFactory($app->make('admin_validator'), $app->make('itemconfig'), $app->make('db'));
});
$this->app['admin_action_factory'] = $this->app->share(function ($app) {
return new ActionFactory($app->make('admin_validator'), $app->make('itemconfig'), $app->make('db'));
});
$this->app['admin_menu'] = $this->app->share(function ($app) {
return new Menu($app->make('config'), $app->make('admin_config_factory'));
});
}