How to disable Kint in local environment under Laravel 4

我的未来我决定 提交于 2019-12-11 03:18:49

问题


I'm using Kint via Composer in Laravel 4 by loading kint first in composer.json so that dd() is defined by kint, not laravel (suggested here).

I want to leave debug calls in my app, and disable Kint if not in the local environment. I'm successfully using config overrides for Anvard using the following structure:

/app/config/local/packages/provider/package_name/overridefile.php

Unfortunately, this is not working for Kint with the following structure:

/app/config/packages/raveren/kint/local/config.php or /app/config/packages/raveren/kint/local/config.default.php

The Kint documentation states:

You can optionally copy the included config.default.php and rename to config.php to override default values…

…which works for me (/vendor/raveren/kint/config.php)

How do I achieve this:

  • without editing a file in the /vendor/ directory that will get overwritten by composer
  • so that kint is only enabled in the local envirnoment

I've also tried adding the following to a helpers.php file which is called before composer in /bootstrap/autoload.php as suggested here:

<?php
isset( $GLOBALS['_kint_settings'] ) or $GLOBALS['_kint_settings'] = array();
$_kintSettings = &$GLOBALS['_kint_settings'];

/** @var bool if set to false, kint will become silent, same as Kint::enabled(false) or Kint::$enabled = false */
$_kintSettings['enabled'] = false;

unset( $_kintSettings );

(but no dice :)

Any suggestions? TIA!


回答1:


I'm not familiar with kint but checked the documentation and found that, to disable kint output, you may use (in runtime)

// to disable all output
Kint::enabled(false);

In Laravel you can check the environment using

$env = App::environment();
if($env == 'your_predefined_environment') {
    Kint::enabled(false);
}

To configure your environment, you may check the documentation.

Update : I've setup my local environment as givel below (in bootstrap/start.php)

$env = $app->detectEnvironment(array(
    'local' => array('*.dev'),
));

And in my local machine, I've setup a virtual mashine which has laravel4.dev as it's base url, so if I visit the app using laravel4.dev or laravel4.dev/logon then I can check the environment in my BaseController.php and it detects the local environment because of .dev

public function __construct()
{
    if(App::environment() == 'local') {
        // do something
    }
}

In your case, I don't know where is the first debug/trace you used to print the output, so you should keep the environment checking and disabling the Kint code before you use any debug/trace but you may try this (if it works for you) but you can check the environment in your filter/routes files too.




回答2:


Hmm.. I'm not sure if this is the ideal way to do it, but this works, and seems Laravel'ish:

// top of app/start/global.php
Kint::enabled(false);

and

// app/start/local.php
Kint::enabled(true);

(assuming you've got a local environment defined: see @TheAlpha's answer for more info)

http://laravel.com/docs/lifecycle#start-files



来源:https://stackoverflow.com/questions/19738344/how-to-disable-kint-in-local-environment-under-laravel-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!