我在控制器中有一个动作要对数据库进行大规模插入... 因此,这会占用大量资源,并且探查器会缓存所有内容,并且服务器会关闭。
如何在控制器上的一项操作中禁用分析器(以及所有调试服务)?
控制器看起来像:
<?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”:参数 方法“ __construct()”的“ $ profiler”引用类 “ Symfony \ Component \ HttpKernel \ Profiler \ Profiler”,但没有此类服务 存在。您可能应该将此类别名为现有的“探查器” 服务。
如果我尝试使用index方法自动连接探查器,则会收到错误public function index(Request $request, Profiler $profiler)
:
控制器“ App \ Controller \ SyncController :: index()”要求您 为“ $ profiler”参数提供一个值。要么是 可为空,没有提供空值,没有默认值 被提供或因为此之后有非可选参数 一个。
编辑 对于大查询,禁用分析器不是解决方案……实际上,您需要禁用setSQLLogger:
$em->getConnection()->getConfiguration()->setSQLLogger(null);
答案 0 :(得分:1)
修改:
如果要从控制器禁用分析器,可以这样:
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
。然后保存文件。
接下来,您应该清除缓存,以生产方式运行并安装资产。为此,请运行以下命令:
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
如果您现在加载应用程序,它将处于生产模式,其中包括更多的缓存,并且由于禁用了调试而速度更快。
注意:
PHP仍然有时间限制。如果仍然达到该限制,则可以更改PHP设置,也可以从CLI运行导入,因为CLI通常没有时间限制。如果用户需要能够自己上传,我建议让他们上传文件,在文件中输入有关该文件的“注释”,然后让cronjob读取该数据库中未导入的文件并将其导入。>