Przekazywanie zmiennej z kontrolera do widoku

Przekazywanie zmiennej z kontrolera do widoku
L8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0

Hej,

Tworzę projekt w CodeIgniterze i mam problem z przekazaniem zmiennej z parametrami do utworzenia pola formularza.

W kontrolerze wygląda to tak:

Kopiuj
public function index() {
	$params = array(
		'name' => 'username',
		'class' => 'form-control',
		'style' => 'width:50%'
		);
	$this->load->view('login', $params);
}

W widoku wygląda tak:

Kopiuj
<div class="form-group">
	<label for="username">Użytkownik: </label>
	<?= form_input($params); ?>
</div>

Po załadowaniu strony dostaję komunikat o niezdefiniowanej zmiennej params. Czy da się w ogóle zrealizować taki zamysł, jak mój? W innym przypadku bez problemu udało mi się przekazać parametry w identyczny sposób, ale nie były to parametry do formularza, tylko zwykłe echo na ekran. Tutaj w ogóle nie rozpoznaje zmiennej.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Może tak?

Kopiuj
$this->load->view('login', [
  'params' => $params,
]);
Pipes
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 459
0

Nie znam frameworka, nie zajęło mi trzech minut znalezienie odpowiedzi :)

https://stackoverflow.com/questions/12294527/passing-variable-from-controller-to-view-in-codeigniter

Masz zatem zmienne $name, $class i $style, ale nie całą tablicę.

Kolejne trzy minuty na znalezienie kodu: https://github.com/bcit-ci/CodeIgniter/blob/07cb9fd45f94d928c0f6dcf73f702808e1e03f62/system/core/Loader.php#L883, to co Ciebie interesuje zaczynamy w linii 925.

Powodzenia i nie bój się szukać ;)

L8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0
Patryk27 napisał(a):

Może tak?

Kopiuj
$this->load->view('login', [
  'params' => $params,
]);

OK, to zadziałało, tylko dlaczego w oficjalnej dokumentacji jest takie coś:

Kopiuj
$data = array(
	'name'          => 'username',
	'id'            => 'username',
	'value'         => 'johndoe',
	'maxlength'     => '100',
	'size'          => '50',
	'style'         => 'width:50%'
);

echo form_input($data);

Sprawdzałem, to nie działa :)

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Co to znaczy nie działa?
Co sprawdzałeś?
W jaki sposób?

L8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0
Patryk27 napisał(a):

Co to znaczy nie działa?
Co sprawdzałeś?
W jaki sposób?

Wpisałem dokładnie taki kod jak w dokumentacji, tak do testu. I dostałem błąd o niezdefiniowanej zmiennej. Twoja propozycja zadziałała.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Jaki dokładnie kod?
Gdzie jest ta dokumentacja?

L8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
czysteskarpety
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Piwnica
  • Postów: 7697
0

Zasadniczo ładowanie css w kontroler jest trochę bez sensu, rozpychasz go nie potrzebnie wartościami, które powinny się znaleźć w widoku.
Powinieneś normalnie w widoku dać inputa z name, potem tylko walidacja w kontrolerze i tyle.
Tutaj masz prosty przykład, chociaż tutków jest od groma:
https://techarise.com/create-login-form-with-codeigniter-and-bootstrap/

L8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0
czysteskarpety napisał(a):

Zasadniczo ładowanie css w kontroler jest trochę bez sensu, rozpychasz go nie potrzebnie wartościami, które powinny się znaleźć w widoku.
Powinieneś normalnie w widoku dać inputa z name, potem tylko walidacja w kontrolerze i tyle.
Tutaj masz prosty przykład, chociaż tutków jest od groma:
https://techarise.com/create-login-form-with-codeigniter-and-bootstrap/

Czyli lepiej zostać przy ręcznym tworzeniu tagów <input> zamiast skorzystać z generowania kodu HTMLa z CodeIgnitera w tym przypadku?

czysteskarpety
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Piwnica
  • Postów: 7697
0
Lucas83 napisał(a):

Czyli lepiej zostać przy ręcznym tworzeniu tagów <input> zamiast skorzystać z generowania kodu HTMLa z CodeIgnitera w tym przypadku?

Wydaje mi się, że tak, bo łatwiej i czyściej zrobić to w kierunku klient->walidacja front->back i rozdzielasz to ładnie wszystko, niż generowanie w dwie strony (łatwiej popełnić błędy, ponadto masz bałagan w kontrolerze).
Dodatkowo w widoku od razu możesz dodać przy inpucie html_escape i np. włączyć tokena przy formularzach, masz wtedy większość kwestii bezpieczeństwa z głowy.

L8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0
czysteskarpety napisał(a):
Lucas83 napisał(a):

Czyli lepiej zostać przy ręcznym tworzeniu tagów <input> zamiast skorzystać z generowania kodu HTMLa z CodeIgnitera w tym przypadku?

Wydaje mi się, że tak, bo łatwiej i czyściej zrobić to w kierunku klient->walidacja front->back i rozdzielasz to ładnie wszystko, niż generowanie w dwie strony (łatwiej popełnić błędy, ponadto masz bałagan w kontrolerze).
Dodatkowo w widoku od razu możesz dodać przy inpucie html_escape i np. włączyć tokena przy formularzach, masz wtedy większość kwestii bezpieczeństwa z głowy.

Rzeczywiście, brzmi to rozsądnie. W takim razie pójdę w tym kierunku, dzięki za wskazówki!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.