Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] MVC dobre praktyki - Code igniter
-pr4ktykant-
post
Post #1





Goście







Mam formularz który dodaje rekordy do bazy. W nim prawie 80 pól z których każde jest inne więc trzeba je ponazywać, dopisać do widoku i umieścić jeszcze w widoku edycji. Sam plik ma ponad 1 000 linijek i gdy próbuję coś zmienić muszę edytować na raz 2 pliki (dodawanie i edycja). Myślę więc jak to powinno się najlepiej rozwiązać. Zrobić jeden widok dla dodawania i edycji i w nim warunki czy zostawić to tak jak jest ?
Gdybym miał drugi widok musiałbym
* zrobić tablice z pustymi wartościami z wszystkich pól które będą zapisane (żeby nie wywaliło w widoku że zmienna nie istnieje)
* zrobić warunki na akcje formularza (add/edit) oraz na submit formularza (dodaj/zapisz zmiany)
tylko czy to jest dobry pomysł takie faszerowanie widoku pustymi zmiennymi oraz warunkami ? Niby bym miał łatwiej ale plik będzie bardziej zamotany chyba. Jak wy to robicie dla takich dużych formularzy ?
Go to the top of the page
+Quote Post
Turson
post
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Cytat
Zrobić jeden widok dla dodawania i edycji i w nim warunki

Dokładnie tak

Ten post edytował Turson 26.02.2014, 11:37:43
Go to the top of the page
+Quote Post
-pr4ktykant-
post
Post #3





Goście







a co robicie z pustymi zmiennymi ? isset czy generowanie ich masowo w controler'ach. Probuje znalezc najlepszy sposob a jak sie czegos naucze pozniej nawykow trudno jest sie pozbyc wiec najlepiej nabyc ich jak najlepszych (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
markuz
post
Post #4





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Te 80 pól różni się od siebie bardzo? Mógłbyś podać jakieś przykłady?
Go to the top of the page
+Quote Post
Turson
post
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


W samym frameworku powinien istnieć sposób na to, że albo wartość jest pusta (dodawanie), albo pobiera ją z bazy jeżeli istnieje (istnieje). Wydaje mi się, że CI powinno mieć coś takiego.
Go to the top of the page
+Quote Post
-pr4ktykant-
post
Post #6





Goście







@markuz baza wyglada mniej wiecej tak (sory ze w screenie):
(IMG:http://my.jetscreenshot.com/demo/20140226-zr74-62kb.jpg)

@Turson o to chodzi ze ucze się Code Igniter i właśnie szukam na to rozwiązania bo nie wiem jak to zrobić :/ nie natknąłem się nigdzie na takie rozwiązanie, ale jak dam zmienną która nie istnieje to oczywiście jest błąd.
Go to the top of the page
+Quote Post
markuz
post
Post #7





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


  1. # Przykładowy kontroler
  2.  
  3. class TestController extends CI_Controller {
  4.  
  5. private $fields = array(
  6. 'label' => 'Nazwa',
  7. 'field' => 'name',
  8. 'rules' => 'required|trim|xss_clean',
  9. 'value' => NULL,
  10. 'type' => 'input'
  11. ),
  12. 'label' => 'Lokalizacja tekstu?',
  13. 'field' => 'location_text',
  14. 'rules' => 'required|trim|xss_clean',
  15. 'value' => NULL,
  16. 'type' => 'textarea'
  17. ),
  18. 'label' => 'Is comm',
  19. 'field' => 'is_comm',
  20. 'rules' => 'required|trim|xss_clean',
  21. 'value' => NULL,
  22. 'type' => 'checkbox'
  23. ),
  24. );
  25.  
  26. public function add()
  27. {
  28. foreach($this->fields as $field)
  29. {
  30. $this->form_validation->set_rules($field['label'], $field['field'], $field['rules']);
  31. }
  32.  
  33. if($this->form_validation->run() == TRUE)
  34. {
  35. foreach($this->fields as $key => $field)
  36. {
  37. $this->fields[$key]['value'] = $this->input->post($field['field']);
  38. }
  39.  
  40. $this->ExampleModel->insert($this->fields);
  41. }
  42.  
  43. $this->load->view('add', array(
  44. 'fields' => $this->fields,
  45. ));
  46. }
  47.  
  48. public function edit($id)
  49. {
  50. foreach($this->fields as $field)
  51. {
  52. $this->form_validation->set_rules($field['label'], $field['field'], $field['rules']);
  53. }
  54.  
  55. if($this->form_validation->run() == TRUE)
  56. {
  57. foreach($this->fields as $key => $field)
  58. {
  59. $this->fields[$key]['value'] = $this->input->post($field['field']);
  60. }
  61.  
  62. $this->ExampleModel->update($this->fields, $id);
  63. }
  64.  
  65. $this->load->view('update', array(
  66. 'fields' => $this->fields,
  67. ));
  68. }
  69.  
  70. }
  71.  
  72. # Widok add.php
  73.  
  74. foreach($fields as $field)
  75. {
  76. switch($field['type'])
  77. {
  78. case 'textarea':
  79. echo form_textarea($field['field'], set_value($field['field']));
  80. break;
  81.  
  82. case 'checkbox':
  83. echo form_checkbox($field['field'], set_value($field['field']));
  84. break;
  85.  
  86. default:
  87. echo form_input($field['field'], set_value($field['field']));
  88. break;
  89. }
  90.  
  91. }
  92. echo form_submit('submit');
  93.  
  94. # Widok edit.php
  95.  
  96. foreach($fields as $field)
  97. {
  98. switch($field['type'])
  99. {
  100. case 'textarea':
  101. echo form_textarea($field['field'], set_value($field['field'], $field['value']));
  102. break;
  103.  
  104. case 'checkbox':
  105. echo form_checkbox($field['field'], set_value($field['field'], $field['value']));
  106. break;
  107.  
  108. default:
  109. echo form_input($field['field'], set_value($field['field'], $field['value']));
  110. break;
  111. }
  112. }
  113. echo form_submit('submit');


CI to bardzo oporny framework, pracuję na nim już od 2 lat i czasami trzeba wymyśleć coś po swojemu żeby sobie zaoszczędzić pracy. Nie wiem czy kod jest prawidłowy bo pisałem z palca i nie sprawdzałem aczkolwiek myślę, że ogólny sens zrozumiałeś (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
-pr4ktykant-
post
Post #8





Goście







Dziękuję za kod, później go jeszcze dokładniej przeanalizuję z verification, sporo się z niego nauczę. Nie rozumiem jednak jednego. Po co to set_value skoro 2 parametr dla np. input i tak przyjmuje wartosc "value" wiec nwaet jak sie da bez set_value to bedzie to samo ...

Nie jestem pewien czy dobrze zrozumiałem ale w Twoim kodzie chyba i tak jest podzielone na 2 pliki widok add/edit a mam tam już ponad 1 000 linijek razem z foundation posegregowanych w tabulatory i zmienianie tego na tym etapie to prawie jak pisanie tego od nowa (IMG:style_emoticons/default/sad.gif)

Zazwyczaj używam trochę inaczej form_helper'a bo muszę dać więcej opcji więc przykładowo wygląda u mnie to tak:
  1. <?=form_label('Name', 'name')?>
  2. <?=form_input(array('name'=>'name', 'id'=>'name', 'placeholder'=>'Obiect name', 'value'=> $object['name'] ))?>

i myślę czy nie szybciej w tym momencie byłoby w widoku dać jakiś isset albo przynajmniej cos w stylu:
  1. ($object['name'] != '' ? $object['name'] : '')

ale jak do tablicy dodać takie cos ?
Mogę dla każdego z 80 elementów dać dodatkowa zmienna np.:
  1. ($object['name'] != '' ? $element_name = $object['name'] : $element_name = '')

ale pisać to znów 80 razy ?

Go to the top of the page
+Quote Post
markuz
post
Post #9





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Cytat
Dziękuję za kod, później go jeszcze dokładniej przeanalizuję z verification, sporo się z niego nauczę. Nie rozumiem jednak jednego. Po co to set_value skoro 2 parametr dla np. input i tak przyjmuje wartosc "value" wiec nwaet jak sie da bez set_value to bedzie to samo ...

Drugi parametr dla input to jego value. Jak go nie podasz to value = "". Jak dodasz do tego set_value('pole') to wtedy value = $_POST['pole']. Jak zrobisz set_value('pole', 'pole2') wtedy jeśli $_POST['pole'] jest puste to pobiera pole2 (w moim przypadku pobierze go z modelu).
Cytat
Zazwyczaj używam trochę inaczej form_helper'a bo muszę dać więcej opcji

Równie dobrze możesz w tablicy fields dodać elementy takie jak placeholder czy id i wyświetlać je jeśli element != NULL

Dodałem widoki edit i add bo takie rozwiązanie jest według mnie lepsze. Ogólnie chciałem Ci przedstawić koncepcję a jeśli chodzi o wykonanie to już twoja sprawa (IMG:style_emoticons/default/wink.gif) Nie chcesz poprawiać - nie musisz. To zależy jak dużo zmian będziesz musiał potem wprowadzać i co zajmie Ci więcej czasu.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 05:26