Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CI][CodeIgniter]codeigniter: wywoływanie funkcji z innego kontrolera
Forum PHP.pl > Forum > PHP > Frameworki
zephyr7
Od jakiegoś czasu (z musuuuu) pracuję w codeigniter i bez przerwy potykam się o dziwne rozwiązania:

Jak wywołać funkcję należącą do innego kontrolera?

Na przykład, jak wywołać z kontrolera Admins funkcję z kontrolera Users, np. users::check_if_logged();

W ogóle, im dłużej pracuję z codeigniter, wydaje mi się coraz bardziej "lamerski"... Fatalne rozwiązania dot. szablonów, relacji w tabelach, itp.

Czy w ogóle jest sens ciągnąć projekt w takim frameworku?
phpion
Cytat(zephyr7 @ 5.08.2011, 09:50:46 ) *
Jak wywołać funkcję należącą do innego kontrolera?

Na przykład, jak wywołać z kontrolera Admins funkcję z kontrolera Users, np. users::check_if_logged();

W CI nie ma możliwości wywołania metody innego kontrolera. Musiałbyś poszukać jakiś rozszerzeń - możliwe, że ktoś coś takiego napisał.

Cytat(zephyr7 @ 5.08.2011, 09:50:46 ) *
W ogóle, im dłużej pracuję z codeigniter, wydaje mi się coraz bardziej "lamerski"... Fatalne rozwiązania dot. szablonów, relacji w tabelach, itp.

Każdy framework jest taki, jak ten kto na nim pracuje. To, że metodę sprawdzająca czy użytkownik jest zalogowany (tak sądzę po jej nazwie) wpakowałeś do kontrolera to nie wina CI tylko Twoja.
zephyr7
heheh, a wcale-bo-nie biggrin.gif

MVC polega na tym, że to kontroler łączy się z modelem, a model właściwie nie powinien robić nic innego, niż "dogadywanie się z bazą"

więc, sens miałoby coś takiego: user::check_if_logged(); to z kolei łączyłoby się z modelem i podejmowało decyzję.

CI wymaga wpakowania skryptu do modelu, który można wywołać np. autoloadem. Wporzo, ale już sama akcja przekierowania to zadanie kontrolera, a nie modelu...

Można niby zrobić coś takiego:

if (!$this->user->logged==true)redirect();

ale to trochę jak przez Ułanbator do Krakowa...

pytałem, bo w Cake'u można użyć zmiennej var $uses i już...

ps. czy w Kohanie jest to samo? Tzn. kiszka z layoutami i podobny problem z wywoływaniem kontrolerów?
pedro84
Poczytaj o MVC, bo w ogóle tego nie rozumiesz, skoro dla Ciebie model ma się tylko dogadywać z bazą danych.

Framework to nie CMS, co to za sztuka dopisać jakiś moduł bazujący na RBAC (nie pamiętam czy CI coś takiego posiada)?

Nie framework kiepski, tylko programista co go używa smile.gif
jacobson
wedlug mnie funkcje takie "wielokrotnie" uzywane jak to ktore przedstawiles powinienes wlozyc do jakiejs biblioteki wlasnej i wywolywac do woli ladujac odpowiednia biblioteke.
el.pablo.72
Najpierw poczytaj o modelu MCV, a później pracuje z CI. Niestety brakuje Tobie podstawowej wiedzy.
zephyr7
Poczytam, poczytam... Chodziło mi o to, że najczęściej model odpowiada za warstwę danych, natomiast kontroler steruje programem.

Ale gdyby mnie ktoś mógł w kilku zdaniach oświecić, byłbym niewymownie wdzięczny!

jacobson
no to mowie Ci zobacz w google "codeigniter libraries" stworz sobie biblioteke z Twoimi funkcjami ktore mozesz wywolywac wszedzie...
phpion
Nie możesz po prostu utworzyć abstrakcyjnej klasy nadrzędnego kontrolera, po którym będą dziedziczyć pozostałe? Zawrzesz w nim wówczas metodę sprawdzającą status zalogowania użytkownika oraz ewentualne przekierowanie, po czym będziesz ją wywoływał w kontrolerach dziedziczących poprzez zwykłe $this->check_if_logged().
qrooel
Zwyczajny helper sobie napisz, albo bibliotekę na 10 linijek i już będziesz miał to o co Ci chodzi. Nie mów źle o CI, bo to porządny FW. ;-)
szok
Chcesz mieć takiego metody do wywołania do napisz sobie bibliotekę, pisze się je banalnie smile.gif

Co do logowania to proponuje zrobić sobie MY_Controller i po nim kontrollery będą dziedziczyły. Informacji w sieci jest mnóstwo.

A to samego logowania użyć jakieś biblioteki Auth, których też w sieci jest mnóstwo.


paxton
CodeIgniter jest dobry ale nie w standardowej wersji, trzeba go sobie trochę samemu ulepszyć.

Da się oddzielać kod do tz. modułów jest od tego HMVC i istnieje do tego biblioteka pod CodeIgniter, druga sprawa to dodać DataMapper dostepny na ich forum, nie będziesz mieć problemów z relacjami. Stworzyć własna bibliotekę Auth lub ściągnąć już jedna z wielu istniejących. Oraz zainstalować Sparks (Automatyczne ściąganie i instalowanie bibliotek poprzez linie poleceń)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.