[RESOLVIDO] - NFePHP com Composer

Precisa instalar o com poder para funcionar.

O composer foi instalado, mas o que acontece é que se utilizar o include do arquivo autoload.php numa aplicação Blank ele dá um erro por causa do namespace.

Trecho do código:

error_reporting(E_ALL);
ini_set('display_errors', 'On');
include "../../../../libs_composer/vendor/autoload.php";

use NFePHP\Extras\Danfe;
use NFePHP\Common\Files\FilesFolders;

O erro está acontecendo é esse : Parse error: syntax error, unexpected ‘use’ (T_USE) in /home/sisttema/public_html/scriptcase8/app/automacao/teste_composer/index.php on line 1045.

Quando fui pesquisar sobre o erro, verifiquei que o comando USE não pode ser usado dentro de um função.
Link da Resposta: http://pt.stackoverflow.com/questions/51014/erro-unexpected-use-t-use-ao-usar-autoload

Abri o arquivo pra verificar e vi que o código é incluído dentro de uma função chamada CONTROLE.

Se tivesse como fazer o include no topo desse arquivo, aí teria como fazer normalmente.

Já tentou colocar onfephp como uma biblioteca externa? Aí você não usa include direto usa a macro propria do SC e ele já faz o include no inicio da aplicação.

Acabei de fazer isso e o problema continua.

sc_include_library("sys", "nfephp_composer", "vendor/autoload.php", true, true);

use NFePHP\Extras\Danfe;
use NFePHP\Common\Files\FilesFolders;

O erro: Parse error: syntax error, unexpected ‘use’ (T_USE) in /home/sisttema/public_html/scriptcase8/app/automacao/teste_composer/index.php on line 1042.

Tire essas linhas

error_reporting(E_ALL);
ini_set(‘display_errors’, ‘On’);

Rodrigo, as linhas foram só no primeiro exemplo. No segundo eu usei de acordo com o código abaixo

sc_include_library("sys", "nfephp_composer", "vendor/autoload.php", true, true);

use NFePHP\Extras\Danfe;
use NFePHP\Common\Files\FilesFolders;

O grande problema é que o SC insere o código dentro de uma function chamada CONTROLE e não se pode usar o comando USE dentro de funções.

Veja esse link: http://pt.stackoverflow.com/questions/51014/erro-unexpected-use-t-use-ao-usar-autoload

De acordo com essa estrutura que vejo no código da página, não é possível utilizar NAMESPACES dentro do SC. E, se for isso mesmo, vai ser um problema.

Qual sua versão do PHP? Alguns scripts não funcionam com versão anterior a 5.4, tive um problema desse com uma autenticação do Facebook, não rodava em 5.4 apenas 5.4 >
Faz um outro teste, deixa esse autoload em um arquivo e no blank faz um include dele.

Rodrigo, a versão do meu PHP é a 5.6. O problema parece ser a estrutura que o SC gera os arquivos. Vc tem alguma aplicação que faz uso de NAMESPACE ?

Tenho sim,
http://casamentonline.com.br/novo-cadastro/
Cadastro com Facebook

Usei da maneira que coloquei acima
Todos os códigos ficam em páginas fora do scriptcase e apenas chamo eles com include.

Vou tentar usar dessa maneira e , se der certo, eu retorno o resultado.

O composer só serve pra atualizar as bibliotecas necessárias para esse projeto. Sendo assim utilize apenas para baixar toda a estrutura do projeto NfePhp.

Em seguida use o projeto e esqueça o composer. Pois o mesmo só servirá quando tiver outra atualização na biblioteca NfePhp.

Fred,

O problema não é o composer e sim o comando USE para utilizar NAMESPACE dentro de uma function no PHP. O que tem que ser feito é uma GAMBIARRA pra poder funcionar.

Que gambiarra?
Também estou tentando usar.
Valeu !

Tem que construir a aplicação num arquivo PHP fora do projeto e CHAMAR ele por fora.

Use desta forma:

Substitua
use NFePHP\NFe\ToolsNFe;
$nfe = new ToolsNFe(’…/…/config/config.json’);
Por
$nfe = new NFePHP\NFe\ToolsNFe(’…/…/config/config.json’);
em vez de usar o USE

Vou fazer um teste e dou o retorno se funcionar bem.

Boa tarde.
Estava com o mesmo problema e ao utilizar a sugestão do amigo Everaldo, resolveu.

@daves.vieira Eu estava com o mesmo problema quando tentava utilizar bibliotecas do Composer, mas consegui resolver de uma forma “Menos gambiarra”, como eu percebi que o problema é o use em uma classe eu configurei minha biblioteca externa uma index.php na raiz e nela eu fiz a chamada, assim quando eu chamo a biblioteca eu chamo a INDEX ao invés da AUTOLOAD.

Ex da index.php:

    <?php
    require 'vendor/autoload.php';
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
    ?>

Como ficou no SC:

sc_include_library("sys", "PHP Spreadsheet", "index.php", true, true);

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
1 Curtida