Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Implementacja panelu administracyjnego przy MVC
jajcarzd1
post
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Witam

Chciałbym Was prosić o zdanie jak u Was to wygląda. Otóż mam swojego frameworka który zbudowany jest mniej wiecej w oparciu o schemat MVC. Aplikacja w katalogu app ma podkatalolgi controllers, models, helpers itd. Podoba struktura jest w katalogu system. Coś podobnie jak w kohanie. Ale mniejsza z tym pytanie moje brzmi w jaki sposób budujcie panel administracyjny do danej aplikacji opierając się o ten schemat. W chwili obecnej mam coś w stylu małego b2b, aplikacja wymaga zalogowania, więc prawdopodobnie zrobię tak, że jeśli logujący będzie miał rolę 'admin' to pokażą się dodatkowe zasoby dostepne dla niego w menu przy zachowaniu tego samego layoutu. Natomiast kontrolery, modele itd będa wrzucane do tych samych katalogów co dla innych userów. Ale zastanawia mnie sytuacja taka gdy będę chciał zrobić w oparciu o ten schemat np. cms-a lub tym podobne gdzie frontend i backend będzie zupełnie inny i nie powiązany.

Czy wtedy robicie np katalog admin w a nim powielacie to samo co dla frontendu czyli np katalogi

Kod
app
- controller
- models
..
cache
config
public
system
templates
....


a potem w routerze dajcie jakieś datkowe reguły które przy wykryciu linku postaci np

Kod
http://project/admin/order/index


odpalają kontroler order z akcja index ?

czy może robicie tak że np. w takiej konfiguracji katalogów

Kod
app
- controller
   - admin
- models
..- admin
....


dodajcie w podlatalogu controllers, models itp np podlatalog admin a w nim dopiero kontrolery, modele i inne pliki administracyjne aby dokonac rozdziału funkcjonalnego ? Tylko że tu jest problem zmiany już np. autoloaderów wszystkich plików bo są inne lokaliazje i szereg innych spraw jak np. to że jest ten sam frontcontroller, bootstrap (coś jak w zendzie) który będzie mi odpalał akcje niekoniecznie potrzebne dla administracji, odpalane jakieś dodatkowe viewHelpery itp.

Generalnie chyba wiadomo o co mi chodzi, chciałbym usłyszeć Wasze zdanie i sugestie
Będe wdzieczny za info pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Ja sobie przerobiłem Kohanę tak, że może bez problemy pracować z użyciem wielu aplikacji. Najistotniejszą zmianą było dodanie kolejnego "poziomu" w kaskadowej strukturze katalogów. Przykładowo: domyślnie Kohana pobiera dane konfiguracje z system/config/plik.php, dołącza application/config/plik.php. Ja dołożyłem jeszcze jeden poziom czyli dołączenie application/config/frontend/plik.php.

Podobne podkatalogi tworzę dla kontrolerów, widoków, logów... Jedynie modele są wspólne. Można rozważyć podział i modeli, ale na chwilę obecną nie było mi to potrzebne (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(phpion @ 7.07.2010, 14:04:29 ) *
Podobne podkatalogi tworzę dla kontrolerów, widoków, logów... Jedynie modele są wspólne. Można rozważyć podział i modeli, ale na chwilę obecną nie było mi to potrzebne (IMG:style_emoticons/default/smile.gif)


Hmm czyli bardziej musiałbym się skłaniać do mojej drugiej propozycji, czyli podkatalogi np. admin w poszególnych katalogach. Dodanie ścieżek 'admin' do autoloaderów. Jeśli chodzi o templaki to używam smarty i w katalogu templates mam taki podział (coś ja kw zendzie):


Kod
layouts
partials
scripts
- cart
   index.tpl
- order
   add.tpl
   edit.tpl


czy ewentualnie zrobić podatalog admin w templates i powielić tą samą strukturę czy może jakoś inaczej ? Choć inaczej za bardzo tego nie widzę.

A jak rozwiązałeś kwestię routera i generowanych linków ? Dodałeś przed kontrolerem np. admin ?
Go to the top of the page
+Quote Post
bim2
post
Post #4





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Hmm, ja metody do administrowania normalnie wrzucam w plik kontrolera. Jak mam powiedzmy użytkowników to jest normalnie Users/Action.class.php (kontroler), Users/Model.class.php (model) i Users/View.class.php (wyswietlanie). Kiedy mam zamiar dodać metodę do zarządzania (powiedzmy usuwanie) na początku klasy dopisuję public $adminMethods = array('Usuń użytkownika' => 'delete', 'Dodaj użytkownika' => 'add'); itd. Mój framework zajmuje się stworzeniem menu i innych rzeczy przydatnych do wygodnego adminsitrowania. (IMG:style_emoticons/default/winksmiley.jpg)

A delete i add to zwykłe metody w klasie. Z uprawnieniami też nie ma problemu bo u mnie wyglądają one w bazie tak że grupie lub userowi mogę przypisać uprawnienie do konkretnej klasy i metody. Jeśli chce zeby ktoś mógł dodać użytkownika to daję Users/add do jego tabeli uprawnień.

Ten post edytował bim2 7.07.2010, 13:47:07
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #5





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(bim2 @ 7.07.2010, 14:45:36 ) *
Hmm, ja metody do administrowania normalnie wrzucam w plik kontrolera. Jak mam powiedzmy użytkowników to jest normalnie Users/Action.class.php (kontroler), Users/Model.class.php (model) i Users/View.class.php (wyswietlanie).


No tak oczywiście że dane akcje będą w kontrolerze, z tym że jeśli to będzie backed to będzie to osobny całkowicie kontroler, Ale takich kontrolerów może być wiele, więc chodzi tu już o podział jakiś funkcjonalny co jest do czego. Zakładając że będe miał kontroler Order zarówno dla usera jak i admina w backendzie więc nie wrzucę dwóch takich samych plików to katalogu controllers.

Cytat(bim2 @ 7.07.2010, 14:45:36 ) *
Kiedy mam zamiar dodać metodę do zarządzania (powiedzmy usuwanie) na początku klasy dopisuję public $adminMethods = array('Usuń użytkownika' => 'delete', 'Dodaj użytkownika' => 'add'); itd. Mój framework zajmuje się stworzeniem menu i innych rzeczy przydatnych do wygodnego adminsitrowania. (IMG:style_emoticons/default/winksmiley.jpg)


To będa osobne kontrolery u mnie dla fronendu i backendu. Do tworzenia menu mam odpowiednie viewHelpery.

Cytat(bim2 @ 7.07.2010, 14:45:36 ) *
A delete i add to zwykłe metody w klasie. Z uprawnieniami też nie ma problemu bo u mnie wyglądają one w bazie tak że grupie lub userowi mogę przypisać uprawnienie do konkretnej klasy i metody. Jeśli chce zeby ktoś mógł dodać użytkownika to daję Users/add do jego tabeli uprawnień.


Tu oczywiście tez nie ma problemu bo akcje mam zapisane w bazie i wykorzustuje to moduł acl do określania dostępu do danego kontrolera i akcji.
Go to the top of the page
+Quote Post
gothye
post
Post #6





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


To będa osobne kontrolery u mnie dla fronendu i backendu. Do tworzenia menu mam odpowiednie viewHelpery.

Bardzo mnie zaciekawiłeś tym zdaniem .

Ponieważ sam przymierzam sie do podobnego projektu na kohana a nie mam pomysłu jak zabrać sie za budowę menu , możesz podać jakieś szczegóły ?

Pozdrawiam
Go to the top of the page
+Quote Post
phpion
post
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(gothye @ 7.07.2010, 15:42:38 ) *
Ponieważ sam przymierzam sie do podobnego projektu na kohana a nie mam pomysłu jak zabrać sie za budowę menu , możesz podać jakieś szczegóły ?

Pytanie nie było skierowane do mnie, ale odpowiem: wystarczy, że dla każdej "aplikacji" będziesz miał osobny front controller. Ja stosuję taką strukturę katalogów:
Kod
--public_html
----admin
------index.php // front controller dla admina
----index.php // front controller dla sekcji użytkowej

Konieczna będzie ingerencja w $config['site_domain'] w application/config/config.php - musisz ją dynamicznie modyfikować w zależności od aplikacji. Najprościej w każdym z front controllerów utworzyć jakąś stałą np. APPNAME (o wartości np. frontend lub backend), a potem skorzystać z warunku:
  1. $config['site_domain'] = APPNAME == 'backend' ? '/admin/' : '/';

Jeśli później będziesz konsekwentnie korzystał z helperów (np. html::anchor() dla linków) to nie będziesz miał większych (żadnych?) problemów.
Go to the top of the page
+Quote Post
gothye
post
Post #8





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


Dzięki phpion (IMG:style_emoticons/default/winksmiley.jpg)
ale chodziło mi o rozwiązanie jakie zastosował jajcarzd1 do budowy menu ,ale z tego co podałeś to również wnioskuje ze to następuje przez pobranie struktury katalogów oraz plików w app (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował gothye 8.07.2010, 13:20:37
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #9





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(gothye @ 8.07.2010, 14:20:15 ) *
Dzięki phpion (IMG:style_emoticons/default/winksmiley.jpg)
ale chodziło mi o rozwiązanie jakie zastosował jajcarzd1 do budowy menu ,ale z tego co podałeś to również wnioskuje ze to następuje przez pobranie struktury katalogów oraz plików w app (IMG:style_emoticons/default/winksmiley.jpg)


No ja nie jadę na kohanie tylko mówię o swoim własnym rozwiązaniu (IMG:style_emoticons/default/smile.gif) więc trudno cokolwiek mi tu polecać.

Cytat(phpion @ 8.07.2010, 08:06:26 ) *
Pytanie nie było skierowane do mnie, ale odpowiem: wystarczy, że dla każdej "aplikacji" będziesz miał osobny front controller. Ja stosuję taką strukturę katalogów:
Kod
--public_html
----admin
------index.php // front controller dla admina
----index.php // front controller dla sekcji użytkowej

Konieczna będzie ingerencja w $config['site_domain'] w application/config/config.php - musisz ją dynamicznie modyfikować w zależności od aplikacji. Najprościej w każdym z front controllerów utworzyć jakąś stałą np. APPNAME (o wartości np. frontend lub backend), a potem skorzystać z warunku:
  1. $config['site_domain'] = APPNAME == 'backend' ? '/admin/' : '/';


Hmm czyli mówisz że wszędzie dodawałeś podkatalogi dla backendu dlla kontrolerów, widoków itp. ale jeśli chodzi własnie o sterowanie to mówisz że masz osobny frontcontroller ? Teraz się tak właśnie zastanawiam czy nie zrobić tego w ten sposób że mojej strukturze nie dodać jednak katalogu admin z osobnym plikiem index.php i będzie ona wyglądać tak:

Kod
- admin
   index.php
-app
  - controllers
  - helpers
  - models
  class.bootstrap.php
-cache
-config
-libraries
-public
-system
-templates
-templates_c
  index.php


i w nim będe odpalał drugi plik froncontroller-a dla panelu administracyjnego. Tylko się zastanawiam czy dodawać dodatkowe katalogi w ten sposób (czyli osobny admin dla kazdego katalogu):

Kod
- app
- controllers
   - admin
- helpers
   - admin
- models
   - admin


a może w ten sposób:

Kod
-app
- admin
   - controllers
   - models
   - helpers
- controllers
- helpers
- models


albo jednak w ogóle stworzyć osobny katalog app w katalogu admin:

Kod
- admin
  -app
    - controllers
    - helpers
    - models
    class.bootstrap.php
    index.php
-app
- controllers
- helpers
- models
class.bootstrap.php
-cache
-config
-libraries
-public
-system
-templates
-templates_c
index.php


z osobnym bootstrapem gdzie inicjuję sobie różne rzeczy plus może osobny templates, config. Sam już nie wiem na co się zdecydować

Ten post edytował jajcarzd1 9.07.2010, 08:06:25
Go to the top of the page
+Quote Post
phpion
post
Post #10





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Sposób organizacji katalogów to już Twoja sprawa, zrób jak Ci wygodniej. Pamiętaj tylko, że część plików powinna byś wspólna dla obu aplikacji (np. konfiguracja) ale z możliwością nadpisania dowolnej wartości.
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #11





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(phpion @ 9.07.2010, 09:19:13 ) *
Sposób organizacji katalogów to już Twoja sprawa, zrób jak Ci wygodniej. Pamiętaj tylko, że część plików powinna byś wspólna dla obu aplikacji (np. konfiguracja) ale z możliwością nadpisania dowolnej wartości.


No chyba jednak tak zrobię że zastosuję powielenie katalogów m.in. aplikacji (app), templaków. Wspólny pewnie pozostanie katalog system z bazowymi kontrolerami, modelami itp., libraries. Będe musiał pomyśleć chyba właśnie o tej konfiguracji bo obecnie mam w katalogu config plik konfiguracyjny w wiekszości ze stały zawierającymi różne ścieżki, dane dostępowe do bazy itp, więc albo powiele ten katalog z plikiem, wpakuję do admina który dostosuję do backednu, albo rzeczywiście będe zaczytywał oryginalny i drugi w kórym bede nadpisywał tylko wartości takie jakie chce mieć w adminie.
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: 16.09.2025 - 04:35