Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Kohana] Wykonanie pliku php z wyświetleniem komunikatu w tle lub generowanie pliku XML, W jaki sposób wykonać instrukcje PHP bez przeładowania strony
mxm
post 29.01.2019, 08:14:55
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


Witam serdecznie.

Mam duży problem ze znalezieniem rozwiązania na temat w jaki sposób we frameworku PHP Kohana wraz z zainstalowanym Angularem:
- wykonać instrukcje z pliku PHP (w moim przypadku jest to przygotowanie danych do XML wraz z połączeniem się do bazy danych).
- w przypadku błędu - wyświetlenie w postaci komunikatu JSON::status - komunikat w tle (aby było to możliwe nie mogę przeładować strony)
- w przypadku braku błędów - rozpoczęcie procedury generowania i pobierania pliku XML (czyli, żeby pojawiło się okno pobrania pliku w przeglądarce).

Nie będę tego robił od początku, ale chciałbym modyfikować istniejący już kod.

Byłbym wdzięczny za naprowadzeniem mnie na pomysł w jaki sposób to zrealizować. Nie jestem aż tak dobrze zaznajomiony z Angularem, ale bez niego chyba się nie uda.
Go to the top of the page
+Quote Post
sabat24
post 29.01.2019, 22:32:53
Post #2





Grupa: Zarejestrowani
Postów: 175
Pomógł: 26
Dołączył: 13.09.2007
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Angular jako tako jest tu bez znaczenia, bo zasada działania jest praktycznie taka sama w każdym froncie. Wysyłasz request ajaxem. W backendzie tworzysz sobie jakieś restowe API albo obsługujesz normalne zapytanie GET czy POST przesłane przez front. Następnie front obsługuje odpowiedź, którą zwrócił backend.

Nie bardzo rozumiem Twoje pierwsze pytanie. Nie ma znaczenia, czy wyślesz żądanie przez angular, czy wpiszesz sobie w przeglądarkę jakikolwiek adres i otrzymasz odpowiedź w ten sposób. Później taką odpowiedź obsługujesz dynamicznie przez front i albo wyświetlasz błąd zwrocony przez backend albo zlecasz przeglądarce pobranie pliku, który został wygenerowany przez backend. Do uruchomienia samego pobierania pliku przez ajax, możesz użyć np. tego skrypciku http://danml.com/download.html
Można też zrobić redirect w przeglądarce na jakiś adres do backendu i w nagłówku wymusić pobieranie pliku XML. Wtedy przeglądarka rozpocznie pobieranie i nie zmieni swojego adresu (chyba, że użytkownik ma wymuszone otwieranie takiego pliku w przeglądarce, wtedy to nie zadziała). Możesz też użyć techniki z iframem stworzonym dynamicznie, któremu wrzucasz adres URL do backendu i backend generuje Ci ten plik i przesyła odpowiednie nagłówki oraz body.
Go to the top of the page
+Quote Post
mxm
post 3.02.2019, 17:40:45
Post #3





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


Dziękuję Ci za wskazówki. Próbuję zmodyfikować gotową aplikację pod swoje potrzeby. Wydaje mi sie, ze obecnie zapytanie angularowe kieruje wszystko do controlera akcji php i tam konczy dzialanie (nie czeka na odpowiedz zwrotną), a sam skypt php konczy sie wygenerowaniem pliku.

Rozumiem, zeby osiągnąć swój cel, muszę napisac pełną obsługę w angularze i kontrolować cały proces i weryfikować odpowiedź z controlera php po wykonaniu akcji i tak jak sugerowałeś, wykonac przekierowanie, aby mogl pobrac sie plik?
Go to the top of the page
+Quote Post
sabat24
post 3.02.2019, 22:00:38
Post #4





Grupa: Zarejestrowani
Postów: 175
Pomógł: 26
Dołączył: 13.09.2007
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Generalnie tak. To też zależy jakiej wielkości jest to plik i ile trwa jego wygenerowanie. Jak jesteś w stanie wygenerować plik "od ręki" to możesz zakodować go w base64 i przesłać do angulara w odpowiedzi. Wtedy kontroler zwraca odpowiedź np. takiej tablicy JSONem:
  1. ['status' => 1, 'file' => base64_encode($file)]


albo

  1. ['status' => 0, 'error' => 'komunikat błędu']


W angularze czekasz na odpowiedź i w przypadku jej prawidłowego otrzymania i w zależności od status, wywołujesz pobieranie pliku albo pokazujesz komunikat.

Jak plik jest większy albo musisz go kolejkować, czyli angular musi czekać np. minutę aż się plik skończy generować, trzeba trochę dodać logiki, ale zasada komunikacji jest zawsze taka sama.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.10.2019 - 05:52