Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Implementacja panelu administracyjnego przy MVC
Forum PHP.pl > Forum > PHP
jajcarzd1
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.
phpion
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 smile.gif
jajcarzd1
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 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 ?
bim2
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. 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ń.
jajcarzd1
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. 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.
gothye
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
phpion
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.
gothye
Dzięki phpion 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 winksmiley.jpg
jajcarzd1
Cytat(gothye @ 8.07.2010, 14:20:15 ) *
Dzięki phpion 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 winksmiley.jpg


No ja nie jadę na kohanie tylko mówię o swoim własnym rozwiązaniu 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ć
phpion
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.
jajcarzd1
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.
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.