⚠ In case you've missed it, we have migrated to our new website, with a brand new forum. For more details about the migration you can read our blog post for website migration. This is an archived forum. ⚠

  •     

profile picture

Custom helper Laravel for connect GC to database



josh

josh
  • profile picture
  • Member

Posted 20 September 2018 - 16:59 PM

Hello everyone,

 

If you need to use a global database connection to use grocerycrud in different controllers without needing to create the _getDatabaseConnection and _getGroceryCrudEnterprise functions in all controllers, this solution could help you.

 

Steps 

 

1. Create a custom helper in the path app/Helper/name-helper.php

 

2.  name-helper.php code:

if ( !function_exists('_getGroceryCrudEnterprise') )
{
    function _getGroceryCrudEnterprise() {
        $databaseConnection = config('database.default');
        $databaseConfig = config('database.connections.' . $databaseConnection);
        //var_dump($databaseConfig);
        $database = [
            'adapter' => [
                'driver' => 'Pdo_Mysql',
                'host'     => $databaseConfig['host'],
                'database' => $databaseConfig['database'],
                'username' => $databaseConfig['username'],
                'password' => $databaseConfig['password'],
                //'unix_socket' => $databaseConfig['unix_socket'],
                'charset' => 'utf8'
            ]
        ];

        $config = config('grocerycrud');
        $crud = new GroceryCrud($config, $database);
        return $crud;
    }
}

if ( !function_exists('_show_output') )
{
	function _show_output($output) {
        if ($output->isJSONResponse) {
            return response($output->output, 200)
                  ->header('Content-Type', 'application/json')
                  ->header('charset', 'utf-8');
        }
        $css_files = $output->css_files;
        $js_files = $output->js_files;
        $output = $output->output;
        return view('default_template', [
            'output' => $output,
            'css_files' => $css_files,
            'js_files' => $js_files
        ]);
    }
}

Importan 1: Remember that to configure laravel you need to edit the .dev file that is located in the root directory, then you do not need to edit $databaseConfig['host'] or $databaseConfig['database']... etc

 

Important 2: Is the same concept for the function _show_output, We need to use this function in others controllers.

 

 

3. Open up your applications app/Providers/AppServiceProvider.php which looks like this:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        
    }

}

 

4. We are going to create a new function inside of the AppServiceProvider called loadHelpers() which wil load all of our PHP helper files.

protected function loadHelpers()
{
    foreach (glob(__DIR__.'/../Helpers/*.php') as $filename) {
        require_once $filename;
    }
} 

Importan: Any PHP file that you add to the app/Helpers/ folder will automatically be loaded. So, you can feel free to organize your helper files however you'd like. FYI, you will not have a Helpers folder by default, you will need to create it.

 

 

5. Then we'll call the loadHelpers() function inside of our register() method. So our final app/Providers/AppServiceProvider.php file will look like the following:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->loadHelpers();
    }

    protected function loadHelpers()
    {
        foreach (glob(__DIR__.'/../Helpers/*.php') as $filename) {
            require_once $filename;
        }
    }
}

 

6. That's it, now you can call the functions _getGroceryCrudEnterprise and _show_output in all your controllers.

public function customers(Request $request)
    {
        $crud = _getGroceryCrudEnterprise();
        $crud->setTable('customers');
        $crud->columns(['customerName','phone','addressLine1','creditLimit']);
        $crud->fields(['customerName','phone','addressLine1','creditLimit']);

        $output = $crud->render();
        return _show_output($output);
    }

 

B)

 

Regards

Josh

 

 

Especial thanks https://devdojo.com/tutorials/custom-global-helpers-in-laravel


web-johnny

web-johnny
  • profile picture
  • Administrator
  • 1,166 posts

Posted 20 September 2018 - 20:45 PM

Thanks for sharing the code with us Josh, and thanks for the detailed explanation   :)