2017-06-28 16 views
13

Opis

W mojej aplikacji laravel, biegnępołączeń Artisan polecenia za pomocą kodu nie działa

php artisan languages:export 

Dostałem plik csv z powodzeniem eksportować oprzeć na moim languages tabeli.

ale głównym celem jest wykorzystanie tego Artisan::call z laravel, ale gdy zrobiłem to w moim kodu

$export = Artisan::call('languages:export'); 

Wynik

Ciągle coraz 0 jako mojego wyniku $export zmiennej - nie eksportowany plik oczywiście.


Aktualizacja

Teraz staram się nazwać poprzez shell_exec() and exec()

$cmd = 'php '.base_path().'/artisan languages:export'; 
$export = shell_exec($cmd); 

widzę nic generowany na jeden z nich.

Od interfejs wiersza poleceń, biegnę

php/Applications/mA/htdocs/code/rzemieślnik językach: export

widziałem mój plik CSV wygenerowany.


W jaki sposób można wykonywać komendy rzemieślnicze za pomocą kodu?

+1

Zgodnie z dokumentami API wynik 'Artisan :: call' jest int.Podejrzewam, że jest to kod wyjścia, a to zero (jak w przypadku skryptu bash) wskazuje na pomyślne zakończenie. – ceejayoz

+0

@ceejayoz: Dziękuję za opracowanie i poprawienie moich myśli. – ihue

+0

Wciąż jestem bardzo ciekawy, dlaczego działa to tylko wtedy, gdy uruchomię polecenie rzemieślnika za pomocą wiersza poleceń, ale nie wewnątrz kodu. – ihue

Odpowiedz

4

Można również wypróbować funkcję exec() z php artisan languages:export jako parametr. W takim przypadku może być konieczne podanie odpowiedniej ścieżki przed poleceniem.

Znalazłem również funkcję Artisan::command zamiast połączenia, może to działa?

+0

Mogę spróbować, ale faktycznym celem jest, aby działał z Laravel 'Artisan :: call' ... – ihue

+0

Zobacz moją aktualizację , Próbowałem go i nie wydaje się, żeby to nazwać. – ihue

5

Spróbuj sprawdzić wyjście poprzez wywołanie dd(Artisan::output()); po $export = Artisan::call('languages:export');

+0

Ok. Mogę to wypróbować. – ihue

8

polecenie Konsola nie zamierza powrócić do pliku CSV, w ten sposób, bo to nie jak nakazuje konsola pracy. Fakt, że otrzymujesz 0 jest właściwie dobrą rzeczą, gdy konsola ląduje (to znaczy, że została ukończona bez rzucania błędów).

Twoje połączenie jest prawidłowe, Twoje oczekiwania są błędne. Musisz zmienić swoje podejście, jednak używasz $export. Jeśli chcesz uzyskać dostęp do nowo utworzonego pliku CSV, spójrz na pakiet phpleague/csv i/lub wbudowane polecenie fopen. Jeśli chcesz tylko wiedzieć, że zakończyło się pomyślnie, po prostu weź ten 0 jako sukces.

+0

Dzięki za poprawienie mojej myśli i oczekiwań. Ale wciąż mam 1 wątpliwości. Dlaczego muszę zajrzeć do phpleague/csv? mój kod już to zrobił. Już wiem, jak to zrobić. Działa, gdy uruchamiam te ** php języki rzemieślnicze: eksport ** na moim CLI, to tylko NIE działa, gdy uruchamiam go z kodu. Nie ma to nic wspólnego ze sposobem eksportowania pliku. – ihue

+0

Wspominam tylko o tym, ponieważ jest to dobre narzędzie do odczytu i zapisu plików CSV. – Shauna

Powiązane problemy