Przekazywanie zmiennej z kontrolera do widoku

0

Hej,

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

W kontrolerze wygląda to tak:

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

W widoku wygląda tak:

<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.

0

Może tak?

$this->load->view('login', [
  'params' => $params,
]);
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ć ;)

0
Patryk27 napisał(a):

Może tak?

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

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

$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 :)

0

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

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.

0

Jaki dokładnie kod?
Gdzie jest ta dokumentacja?

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/

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?

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.

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!

1 użytkowników online, w tym zalogowanych: 0, gości: 1