1

Laravel 4 では、構成変数「debug」をデフォルトで「false」に設定したいのですが、自分の IP アドレスからのリクエストに対しては「true」に設定します (テストは最終的にそれよりも洗練されたものになります)。

http://four.laravel.com/docs/configurationのドキュメントに基づいて、次のことを試しました。

config/app.php:

'debug' => false

filters.app - App::before (同じ効果で、routes.php の先頭にコードを配置しようとしました):

if(Request::getClientIp() == '[my ip address]') {
  echo 'hello world';
  Config::set('app.debug', true);
}
echo Config::get('app.debug');

悪い URL にアクセスすると、「hello world」と「1」が表示されるので問題ありませんが、その下に公開 (非デバッグ) エラー メッセージが表示されるだけです。

実行時に設定された構成変数は 1 つのリクエストに対してのみ設定されることは理解していますが、「hello world」が表示されているため、これは 1 つのリクエストのように見えます。

私のコードを配置するより良い場所はありますか、それとも私がやっていることは実際には不可能ですか?

4

2 に答える 2

4

これは、Laravelの環境検出で達成できるもののようです(リンクしたページから: http://four.laravel.com/docs/configuration#environment-configuration )。

環境を使用して、名前を決定し (自分の名前を付けることができdebuggingます)、その環境の構成ファイルを config ディレクトリのサブディレクトリに配置します。したがって、上記の場合、構成app.phpファイル/app/config/debugging/app.php(および必要な他のファイル) をコピーし、必要な構成変更を行います。

次に重要なステップは、アプリがdebugging構成ファイルを使用するように環境を検出することです。これは で指定されてい/bootstrap/start.phpます。配列の代わりにクロージャーを Laravel の環境検出に渡し、使用する環境名を返すことができるため、上記のアプローチを次のように使用できます。

$env = $app->detectEnvironment(function()
{
    if ($_SERVER['REMOTE_ADDR'] === '[my ip address]') {
        return 'debugging';
    }
});

私はそれをテストしていませんが、動作するはずです。それが役立つことを願っています!

于 2013-10-06T02:25:44.210 に答える
2

例外ハンドラーの方法を掘り下げた後、これが信頼できることがわかりました。

  Config::set('app.debug', true);
  app()->startExceptionHandling();

なぜこのアプローチ?Laravel は起動時に例外ハンドラーをバインドするため (PHP 内部のものを台無しにすることを避けるため)、その部分の再起動を偽装する必要があります。

PS。受け入れられた回答が正確であるとは思わないため、この古い質問を復活させます。実行時にデバッグを有効にすることはできません。また、システム変数を見て、ユーザーが従業員であるかどうかを検出できません。

于 2015-12-10T17:45:21.240 に答える