Symfony 4 отключить профилировщик в действии контроллера - PullRequest
0 голосов
/ 25 августа 2018

У меня есть действие в контроллере для массового ввода в базу данных ... Так что это использует много ресурсов, и профилировщик кэширует все, и сервер отключается.

Как я могу отключить профилировщик (и все службы отладки) в одном действии на контроллере?

Контроллер выглядит следующим образом:

<?php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use App\Sync\Incomming\Syncronize;

/**
* @Route("/sync")
*/
class SyncController extends AbstractController
{
    private $syncronize;
    public function __construct(Syncronize $syncronize)
    {
        $this->syncronize = $syncronize;
    }
    /**
     * @Route("/",name="sync_index")
     */
    public function index(Request $request, Profiler $profiler)
    {  
        $message = "Hello";

        return $this->render( 'sync/output.html.twig', ['message' => $message ]); 

    }   
}

если я попытаюсь автоматически связать профилировщик в методе конструктора, то получу ошибку public function __construct(Syncronize $syncronize, Profiler $profiler):

Невозможно автоматически подключить службу "App \ Controller \ SyncController": аргумент "$ profiler" метода "__construct ()" ссылается на класс "Symfony \ Component \ HttpKernel \ Profiler \ Profiler", но неттакой сервис существует.Возможно, вам следует присвоить этому классу псевдоним существующей службе «profiler».

Если я попытаюсь автоматически подключить профилировщик в методе index, то получу ошибку public function index(Request $request, Profiler $profiler):

Контроллер "App \ Controller \ SyncController :: index ()" требует, чтобы вы указали значение для аргумента "$ profiler".Либо аргумент имеет значение NULL, и значение NULL не было предоставлено, значение по умолчанию не было предоставлено, либо после этого есть необязательный аргумент.

РЕДАКТИРОВАТЬ Для больших запросовотключение профилировщика не было решением ... На самом деле вам нужно отключить setSQLLogger:

$em->getConnection()->getConfiguration()->setSQLLogger(null);

1 Ответ

0 голосов
/ 25 августа 2018

Изменить:
Если вы хотите отключить профилировщик из контроллера, вам может понравиться это:

use Symfony\Component\HttpKernel\Profiler\Profiler;
// ...

class DefaultController
{
    // ...

    public function someMethod(Profiler $profiler)
    {
        // for this particular controller action, the profiler is disabled
        $profiler->disable();

        // ...
    }
}

Источник: https://symfony.com/doc/current/profiler/matchers.html

Другой способ будет использовать: $this->get('profiler')->disable();


Старый
Просто переключите приложение в режим prod и отключите режим отладки.

Для этого откройте файл .env на сервере в вашем любимом редакторе (Примечание: вы никогда не должны фиксировать этот файл в Git, так как там хранятся секреты!).

В этом файле вы должны увидеть раздел, начинающийся с: ###> symfony/framework-bundle ### Чуть ниже есть APP_ENV=dev и APP_DEBUG=1, измените эти две строки на APP_ENV=prod и APP_DEBUG=0. Затем сохраните файл.

Далее вы должны очистить кеш для режима prod и установить ресурсы. Для этого выполните следующие команды:

php bin/console cache:clear --env=prod --no-debug
php bin/console cache:warmup --env=prod --no-debug
php bin/console assets:install --env=prod --no-debug --symlink

Если вы сейчас загружаете приложение, оно находится в режиме prod, который включает больше кэширования и работает быстрее, так как отладка отключена.


Примечание:
Для PHP все еще будет ограничение по времени. Если вы все еще достигнете этого предела, вы можете либо изменить настройки PHP, либо, в качестве альтернативы, запустить импорт из CLI, поскольку CLI обычно не имеет временных ограничений. Если пользователям необходимо загружать файлы самостоятельно, я бы посоветовал им загрузить файл, ввести «примечание» о файле в базу данных и сделать чтение cronjob, что в базе данных для не импортированных файлов, и импортировать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...