
magento 2
Stores, Configuration, o campo que precisa mudar está bem ali — cinza, sem cursor, com um aviso de que o valor vem de um arquivo de configuração. Não é permissão do seu usuário nem cache velho: alguém gravou a chave dentro do array system do app/etc/env.php, e valor de arquivo sempre ganha do banco.
Cada campo do painel vira um caminho de três níveis, tipo web/unsecure/base_url. Confirme o valor e vasculhe os dois arquivos que podem estar travando:
bin/magento config:show web/unsecure/base_url
grep -n "base_url" app/etc/env.php app/etc/config.php
'system' => [
'default' => [
'web' => [
'unsecure' => [
'base_url' => 'https://loja.com.br/',
],
],
],
], Duas coisas colocam valor ali. O bin/magento config:set --lock-env caminho/da/chave valor escreve no env.php de propósito, uma chave por vez. Já o bin/magento app:config:dump despeja a configuração inteira nos arquivos e trava dezenas de campos numa tacada só: o que é compartilhado vai pro app/etc/config.php e o sensível pro env.php. É o susto clássico depois que alguém roda o dump pra montar pipeline de deploy e some com metade do painel.
Não existe um config:unlock no Open Source. Você tira a chave do array na mão, deixando o resto do arquivo intacto — copie o env.php antes, porque uma vírgula fora do lugar derruba a loja inteira. Depois limpa o cache de configuração e regrava o valor no banco:
cp app/etc/env.php app/etc/env.php.bak
bin/magento cache:clean config
bin/magento config:set web/unsecure/base_url https://loja.com.br/
bin/magento config:show web/unsecure/base_url Enquanto a chave continuar no arquivo, o config:set sem --lock-env se recusa a gravar e avisa que o valor já está bloqueado. Escopo também conta: o mesmo caminho pode estar preso no default e livre em website, então rode o config:show com --scope=websites --scope-code=base antes de concluir que resolveu. E quando a chave for base_url de produção ou credencial de pagamento, deixar travada em arquivo é proposital — aí versione o env.php do ambiente em vez de liberar o campo pra quem tem acesso ao painel.
A função json_validate do PHP 8.3 diz se a string é JSON válido sem montar array nem objeto. Serve para…
Tire a chave de API do código com variável de ambiente, bloqueie o .env no nginx e entenda por que…
A opção de armazenamento de pedidos travada em posts e a sincronização que nunca termina: como migrar para as tabelas…
Troque strpos e substr por str_contains, str_starts_with e str_ends_with no PHP 8, com o polyfill para quem ainda mantém servidor…
Copiou um InstallData.php de tutorial antigo e o atributo não apareceu depois do setup:upgrade? Veja a classe de Data Patch…
Função pronta para gerar um cupom único por cliente depois do pedido concluído, com WC_Coupon, data de expiração, limite de…