Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Kohana] jak ustawić jeden kontroler dla kilku podstron?
nowy_pehapowiec
post
Post #1





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Dzięki pomocy dobrych ludzi z forum wybrałem swój framework Kohana. Ale mam z nim pewien kłopot. Jak ustawić jeden kontroler dla kilku podstron? Treść tych podstron ma być odczytywana z bazy danych. Do czego jest mi potrzebny tylko identyfikator, który jest podany w adresie, np home. Dzięki przepisywaniu adresów w apachu mam nice-url: adres.pl/home albo adres.pl/contact. Tylko, że Kohana dla takich adresów szuka kontrolerów home i contact. A kontroler ma być jeden wspólny i tylko ma pobierać różne rekordy z tej samej tabeli. Jak to zrobić przy pomocy Kohany?

pozdro
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
pedro84
post
Post #2





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Powinny być dwa kontrolery. Możesz utworzyć sobie główny kontroler, np. site, po którym oba kontrolery będą dziedziczyły.


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #3





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Niemożliwe! Musi być inne wyjście. Przecież dla 20 podstron nie będę pisać 20 kontrolerów które będą się różnić tylko identyfikatorem rekordu pobieranego z bazy?? Przy większej stronie liczba plików będzie masakrycznie duża. Na pewno nie da się tego ominąć?

pozdro
Go to the top of the page
+Quote Post
Riklaunim
post
Post #4





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

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


A pomyślałeś żeby zrobić jeden kontroler, który będzie z linku otrzymywał zmienną określającą który rekord pobrać?


--------------------
Biblioteki: Skrypty, CMS | Kurs PHP | Python
Go to the top of the page
+Quote Post
Gryf
post
Post #5





Grupa: Zarejestrowani
Postów: 170
Pomógł: 40
Dołączył: 14.08.2008
Skąd: Katowice

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


zawsze możesz namieszać w routers dla kohany 2.3.x
kohana/application/config/routes.php
i robisz
Kod
$config['_default'] = 'witamy';
$config['strona'] = 'page/strona/1';
$config['kontakt'] = page/strona/2';

i potem jak wywołasz adres.strony/kontakt.html
to do metody strona kontrolera page zostanie podana wartość 2 ;]

add. bbcode ;]

Ten post edytował Gryf 9.05.2010, 08:56:56
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #6





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Riklaunim, o tym pomyślałem ale nie mam pojęcia jak to zrobić.

Gryf, wybrałem Kohana3 i tam chyba trzeba to zrobić jakoś inaczej. Nawet takiego pliku jak podałeś nie ma.

pozdro
Go to the top of the page
+Quote Post
destroyerr
post
Post #7





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


@nowy_pehapowiec skoro wybrałeś Kohana 3 to powinieneś wiedzieć, że główną zmianą w stosunku do wersji 2 jest zmiana routingu. Polecam poszukać w google odpowiednich materiałów. Właśnie sprawdziłem i mogę potwierdzić, że takowe .
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #8





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


destroyerr dzięki, trochę się naszukałem, ale wszystkiego i tak nie mam.

Znalazłem bootstrap. Tam chyba mogę dać np:
Route::set('default', '(<id>)')
->defaults(array(
'controller' => 'main',
'action' => 'page',
));

Wtedy wpisując strona.pl/home odwołam się do kontrolera main i akcji page? Ale teraz nie wiem jak skorzystać w tej akcji z id inaczej niż poprzez $_SERVER? I mam jeszcze jedną zagwozdkę. Co jeśli dla adresu strona.pl/contact będę chciał skorzystać z innej akcji albo kontrolera? Będę chciał wyświetlić formularz a nie pobierać dane z bazy.

Jeśli znasz jakieś dobre tutki o Kohana 3 to proszę podaj linki do nich. Ja bazuje na oficjalnej (kiepskiej, bez przykładów) dokumentacji i na nasza.kohana.pl. Poza tym to tylko pojedyncze wpisy na blogach. Nigdzie nie ma niczego bardziej kompletnego?


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





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

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


Do oddzielnych logicznie stron np. kontakt, czy list newsów stosuj oddzielne kontrolery. Jeżeli narzędzie nie ma wystarczającej dokumentacji to do kosza i głęboko zakopać winksmiley.jpg


--------------------
Biblioteki: Skrypty, CMS | Kurs PHP | Python
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #10





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Riklaunim właśnie takie dwa kontrolery chciałbym zrobić, jeden do "stron z bazy", drugi do "formularza kontaktowego". Ale nie wiem jak zarządzać ich użyciem. Co zrobić, żeby strona kontakt korzystała ze swojego kontrolera a reszta z innego. To powinno być w tym bootstrapie ale nie wiem jak zdefiniowac takie dopasowanie.

A dokumentacja Kohany jest gorsza niż niewystarczająca. Tylko, że nie znalazłem lepszej alternatywy. Inne FW to kobyły po kilkanaście albo kilkadziesiąt MB, tysiące funkcjonalności których nie potrzebuje. Chyba, że coś przegapiłem w swoich poszukiwaniach?


pozdro
Go to the top of the page
+Quote Post
ziqzaq
post
Post #11





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Dodajesz sobie poprostu odpowiednie reguły routingu dla odpowiednich stron.
Pamiętaj, że najbardziej ogólna reguła idzie na koniec ponieważ pierwsza pasująca jest wykonywana.
Np.
  1. Route::set('r1', 'page/kontakt')
  2. ->defaults(array(
  3. 'controller' => 'contact',
  4. 'action' => 'index'
  5. ));
  6. Route::set('r0', 'page(/<id>)', array('id' => '.*?'))
  7. ->defaults(array(
  8. 'controller' => 'page',
  9. 'action' => 'index',
  10. 'id' => 0
  11. ));


Edit: Oczywiście skoro szukamy id to regex dla tego parametru powinien wyglądać raczej tak: "[0-9]+?"

Ten post edytował ziqzaq 9.05.2010, 12:52:45
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #12





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Ziqzaq dzięki,
już powoli zaczynam to kumać. Po prostu wstawiam kolejne wzorce tak jak w mod_rewrite. Tylko jak jest z tym id? Jak użyć id z adresu w kontrolerze? I czy można używać innych nazw zmiennych zamiast id?



pozdro

Ten post edytował nowy_pehapowiec 9.05.2010, 14:01:47
Go to the top of the page
+Quote Post
ziqzaq
post
Post #13





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Jeśli się dobrze orientuję to masz dwa podstawowe parametry: <controller> i <action>.
Resztę definiujesz wedle uznania tak jak pokazałem wczesniej.
Parametry (oprócz <controller> i <action>) są przekazywane do metody akcji.
Czyli mając parametry <id> i <przykładowy> i wykonywaną akcję "index" z jakiegoś kontrolera masz:
  1. public function action_index($id, $przykladowy)
  2. {
  3. var_dump($id, $przykladowy);
  4. }

Nazwy zmiennych w parametrach metody "action_index" powyżej są dowolne czyli równie dobrze może być:
  1. // $numer dla <id>
  2. // $tekst_przykladowy dla <przykladowy>
  3. public function action_index($numer, $tekst_przykladowy)
  4. {
  5. var_dump($numer, $tekst_przykladowy);
  6. }


Ten post edytował ziqzaq 9.05.2010, 14:21:13
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #14





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Czy razem to powinno być jakoś tak?
Bootstrap:
Kod
Route::set('default', 'contact')
->defaults(array(
'controller' => 'main',
'action' => 'contact_form',
));

Route::set('default', '(<id>)')
->defaults(array(
'controller' => 'main',
'action' => 'page',
));


I w kontrolerze:
Kod
  public function action_contact_form()
      {
      //formularz
      }
      public function action_page($id)
      {
      var_dump($id);
      }


questionmark.gif

Ten post edytował nowy_pehapowiec 9.05.2010, 14:35:15
Go to the top of the page
+Quote Post
ziqzaq
post
Post #15





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Wydaje się ok oprócz tego, że nadpisujesz sobie regułę "default" (zostanie tylko ta druga).

Ten post edytował ziqzaq 9.05.2010, 14:45:49
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #16





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


JEszcze raz dzięki!
Fakt, powinienem mieć dwie różne nazwy. Czy teraz jest ok??
Kod
Route::set('nie_default_a_contact', 'contact')
->defaults(array(
'controller' => 'main',
'action' => 'contact_form',
));

Route::set('default', '(<id>)')
->defaults(array(
'controller' => 'main',
'action' => 'page',
));


Czy z nazw tych tras (route) gdzieś później się korzysta?

pozdro
Go to the top of the page
+Quote Post
ziqzaq
post
Post #17





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Cytat
Czy teraz jest ok??

Wygląda ok. Sprawdź sobie.
Cytat
Czy z nazw tych tras (route) gdzieś później się korzysta?

To już zależy od twoich potrzeb. Możesz pobierać sobie zdefiniowane ścieżki routingu poprzez metodę Route::get($name).
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #18





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


A do czego może mi się przydać: Route::get($name)
Jakie może być dla tego praktyczne zastosowanie?

pozdro
Go to the top of the page
+Quote Post
ziqzaq
post
Post #19





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Szybki przykład to ostatni nagłówek dokumentacji Routes, URLs, and Links.
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #20





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Czytałem to kilka razy ale nic ciekawego nie zauważyłem albo nie zrozumiałem :| ale dzięki za pomoc

pozdro
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 Aktualny czas: 22.08.2025 - 06:49