Direto ao ponto
Existe um produto proprietário que me ajuda com êxito na depuração e o chamou de PhpDump .
Ao mesmo tempo, o CMS MODX solicitou que eu escrevesse meu depurador. Claro que existe var_dump, phpConsole, xDebug no PHP. Mas aqui estou eu com o meu PhpDump .
Eu direi que a solução não é perfeita, mas muito prática.
Quanto você gosta, você decide.
Aqui estão algumas capturas de tela de como isso se parece.


No artigo, mostrarei como instalar e usá-lo no CMS MODX Revo
Exigências
Apache + PHP 7, CMS MODX Revo 2.7
Git + compositor
Baixe e instale
Crie um diretório para o PhpDump separadamente de seus projetos. Como você pode usá-lo em um servidor local em diferentes projetos. Para fazer isso, não é necessário instalá-lo em qualquer lugar.
No diretório, crie um arquivo composer.json
com os seguintes dados:
{ "require":{ "Alpa/PhpDump":"1.*" }, "repositories": [ { "type": "git", "url": "https://github.com/ALexeyP0708/PhpDump.git" }, { "type": "git", "url": "https://github.com/ALexeyP0708/EntityDetails" } ] }
No terminal, digite $ composer install
Ao instalar através do compositor, o projeto estará localizado na [directory install]/vendor/PhpDump
- Instalação via GIT
Comando para terminal
$ git clone https://github.com/ALexeyP0708/PhpDump.git
Ou descompacte o arquivo zip.
pode ser baixado aqui no GitHub
Instale o PhpDumpConsole
No Google Chrome, vá para a seção Extensões , ative o modo de desenvolvedor (no canto superior direito) e faça o
.
Especifique o diretório [directory PhpDump]/ChromeExtension/PhpDumpConsole_v1.1
.
Um ícone de mira vermelho aparecerá no painel - uma engrenagem em um círculo. Se a engrenagem não ficar azul quando você clicar, o servidor não suportará o PhpDump ou o cliente não passará a autorização.
Verificação de integridade
confira o arquivo [dirictory Php Dump]/tests/test_debugManager.php
Se instalado através do compositor, você precisará especificar a rota correta para o arquivo do carregador automático.
Para fazer isso, substitua a linha
include_once __DIR__.'/../vendor/autoload.php';
em
O diretório em que o PhpDump está instalado deve ter acesso à web e roteamento gratuito para scripts.
Suponha que você defina o PhpDump como /sites/www/mysite/TestPhpDump
e acesse o site http://mysite/
para executar o script de teste
http://mysite/TestPhpDump/tests/test_debugManager.php
A página com os erros gerados será iniciada. Inicie o console do Google Chrome e clique na engrenagem no painel do aplicativo. A página será recarregada, a engrenagem ficará azul. Todas as informações agora serão exibidas no console.
Como executar em seu projeto
Na parte superior da página que executa o script para seu projeto, você deve especificar:
include_once '[directory phpdump]/vendor/autoload.php';
Você precisa entender que o PhpDump é executado no cenário em que os dados da string são declarados.
Você também deve levar em consideração o fato de que o PHPdumpConsole exibe um dump não apenas para a página principal, mas também para solicitações de ajax e para scripts de front-end gerados dinamicamente pelo servidor.
Se o seu projeto acessar aleatoriamente diferentes cenários (por exemplo, a página foi carregada através do Index.php e a solicitação do ajax foi feita através do other.php ou o navegador carregar script dinâmico gerado por js do script.js.php), situações imprevistas podem ocorrer.
Nesse caso, é necessário que todo o roteamento passe por um único arquivo de script. Por exemplo, via /index.php. Ou aplique soluções adicionais, como foi feito com o MODX (descrito abaixo).
Iniciar em um site de teste com o CMS MODX
Existem várias soluções para executar o PhpDump no CMS MODX.
A primeira solução - de acordo com as instruções acima, escreva o código no arquivo index.php do seu site:
include_once '[directory phpdump]/vendor/autoload.php'; new PhpDump\InitDump();
Nesse caso, o PhpDump funcionará no modo de depuração e detectará erros.
Mas tudo o que aparecerá nos logs do MODX, bem como os erros suprimidos pelo sistema,
não será exibido no PhpDumpConsole
A segunda opção: Oficial - sem fazer personalização. Essa é uma extensão da classe ErrorHandler e a configuração das variáveis correspondentes nos parâmetros MODX.
Esta solução tem uma desvantagem. Se os dados forem inseridos incorretamente nas configurações, o site trava. E a situação pode ser corrigida apenas através do banco de dados.
Portanto, a descrição desta opção é omitida.
Nesta opção, você pode ver todos os erros PHP gerados. Mas você não verá os logs gerados, nos quais uma parte significativa dos erros do MODX aparece.
A terceira opção, na qual eu pessoalmente me referi, é configurar o roteamento completo de chamadas de script por meio do arquivo 'dev_route.php';
Usando .htaccess, todas as chamadas não estáticas são direcionadas para o arquivo dev_route.php.
ATENÇÃO: Até o final, o comportamento não foi investigado. Talvez alguns aplicativos possam oferecer uma lógica diferente de solicitações para o site, cujo roteamento não está descrito em dev_route.php.
ATENÇÃO: .htaccess não foi concluído completamente. Nem todos os recursos estáticos estão definidos nele. Portanto, eles serão processados em dev_route.php
Fazemos um backup do arquivo .htaccess
do antigo.
Crie um novo .htaccess
na raiz do diretório do site e digite o código:
# file .htaccess #---------------------------------------- # . - . RewriteCond %{REQUEST_URI} /manager/min/assets/.* RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_URI} /manager/assets/.* RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_URI} /assets/.* RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ - [R=404,L] #--------------------------------------- #--------------------------------------- # RewriteCond %{REQUEST_URI} /manager/min/assets/.* RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_URI} /manager/assets/.* RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_URI} /assets/.* RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteRule ^(.*)$ $1 [L] #--------------------------------------- #--------------------------------------- # c . RewriteCond %{REQUEST_FILENAME} .*\.js$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.html$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.css$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.gif$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.jpg$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.jpeg$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.png$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.svg$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.woff$ RewriteRule ^(.*)$ $1 [L] #--------------------------------------- #--------------------------------------- # . RewriteCond %{REQUEST_URI} /manager(?:|/.*) RewriteRule ^(.*)$ dev_route.php [L] RewriteCond %{REQUEST_URI} /connectors(?:|/.*) RewriteRule ^(.*)$ dev_route.php [L] #--------------------------------------- #--------------------------------------- # . RewriteCond %{REQUEST_URI} .* RewriteRule ^(.*)$ dev_route.php?q=$1 [L,QSA] #---------------------------------------
Criamos o arquivo dev_route.php
na raiz do diretório do site e dev_route.php
código nele:
<?php include_once '[yor path php dump]/vendor/autoload.php';
Em seguida, no arquivo core\xpdo\xpdo.class.php
(para o MODX revo 2.7), formate o método de log da seguinte maneira:
public function log($level, $msg, $target= '', $def= '', $file= '', $line= '') { \deb::print($msg."=>[$target][$def][$file][$line]",'LOG'); $this->_log($level, $msg, $target, $def, $file, $line); }
E isso é tudo. Tudo deve funcionar corretamente para você.
Teste no painel de administração. se o painel do administrador carregar bem, tudo será feito como deveria.
Como usar:
Configurações de segurança
Atualmente, o PhpDump não foi projetado para trabalho profissional, portanto as condições de segurança são mínimas.
Se você decidir anexar o PhpDump a um site existente na Internet, no arquivo [diretório phpdump] /src/include_file_in_index.php, altere as seguintes configurações para autorização:
$settings=[ 'hashkeys'=>[ 'HashKey'=>[
No lado do cliente no console, na lista suspensa 'Java Scripts Context', selecione PhpDumpConsole e insira o código no console
dm.setHashKey({ hashkey:'HashKey', greeting_server:'greeting_server', greeting_client:'greeting_client' }); // hashkey , greeting_server, greeting_client . dm.bindHashKeyDomain({hashkey:'HashKey',domain:'global'}); // domain:'your_domain' // domain='global' .
Outros pãezinhos
Através do console, você pode controlar o on / off backtrace, filtrar a saída.
Você pode encontrar tudo isso nas instruções na página do GitHub
O PhpDump pode ser usado não apenas para o MODX, mas também em outros projetos. A principal coisa a saber como prender.
PS: Se você é fã do MODX, em breve encontrará novos pães: Uma maneira de formar a divisão e conquistar trechos. Os trechos de lógica e os trechos de modelo podem se auto-organizar e agrupar, combinando trechos 2x-3x para expandir o comportamento.
Há flexibilidade na escrita de trechos. Os programadores não precisarão descrever o ciclo completo de gravação de um trecho, mas apenas uma parte separada, descrevendo sua API para interação adicional com outros trechos.
Obrigado a todos.