Witam,
Chciałem prosić o pomoc przy przenoszeniu danych (konkretnie tablic) z PHP do JS. Obecnie pracuje nad pewnym projektem, opartym o wzorzec MVC, gdzie widoki generuje z wykorzystaniem silnika Twig.
W kontrolerze wydobyłem dane z modelu i przesłałem je do widoku w następujący sposób:
public function showAction() {
$balance = new Operation($_POST);
$balance -> balanceTime = $this -> route_params['period'];
$incomeData = Operation::getIncomeData($balance, $_SESSION['user_id']);
$expenseData = Operation::getExpenseData($balance, $_SESSION['user_id']);
$incomeSummary = static::operationSummary($incomeData);
$expenseSummary = static::operationSummary($expenseData);
$balanceSummary = $incomeSummary - $expenseSummary;
View::renderTemplate('Balance/results.html', [
'incomeData' => $incomeData,
'expenseData' => $expenseData,
'incomeSummary' => $incomeSummary,
'expenseSummary' => $expenseSummary,
'balanceSummary' => $balanceSummary
]);
}
Następnie w widoku dane generowałem w tabeli w następujący sposób (jeden z przykładów):
<tbody>
{% for income in incomeData %}
<tr class="test">
<th scope="row"></th>
<td>{{ income.name }}</td>
<td>{{ income.amount }}</td>
<td>{{ income.date_of_income }}</td>
</tr>
{% endfor %}
</tbody>
Teraz chciałbym te dane, które przesłałem do widoku, przesłać również do JS. I tutaj pojawia się problem, ponieważ o ile pojedyncze zmienne mogę z łatwością pobrać za pomocą selektora lub po prostu tworząc zmienną w skrypcie w widoku:
let zmienna = '{{ balanceSummary }}';
o tyle z tablicami mam problem, ponieważ tworzenie identyfikatorów dla każdej linijki wydaje się bez sensu i mało praktyczne, a tworzenie zmiennej w skrypcie w widoku w takiej postaci jak wyżej, zwraca błąd, że nie można konwerterować tablicy do stringa. Czy mógłby ktoś poradzić jeszcze jakiś inny sposób?
Próbowałem jeszcze wykorzystać do tego funkcję fetch(). Natomiast tutaj mam taki problem, że przesyłane dane nie są zapisywane w formacie json, więc nie mogę ich w żadem sposób parsować (albo przynajmniej nie jestem tego świadom, że mogę). Jestem w stanie nawiązać połączenie ze stroną i wydobyć parametry tego połączenia, natomiast w jaki sposób mogę wydobyć tylko te konkretne dane, które przesyłam? Do tej pory udało mi się jedynie wydobyć całą strukturę widoku (pliku html) jako tekst, ale to jest raczej marne rozwiązanie . Nie jestem pewien ale być może odpowiednie ustawienie headera mogłoby tutaj pomóc. Jeśli tak to mam ogromną prośbę o pomoc z jego konfiguracją. Zależy mi na tym aby w JS znajdowała się tablica z taką samą strukturą jaka wychodzi z kontrolera.