Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MVC] Pomoc w teoretycznym ułożeniu struktury katalogów i autoloadera
Forum PHP.pl > Forum > PHP
Elber
Witam,

uczę się programować w MVC i chcę napisać sobie swój własny mały projekt który będzie miał 2 poziomy dostępu 1 dla wszystkich a drugi tylko dla administratorów.

Zastanawiam się jak dobrze poukładać strukturę katalogów i jak napisać autoloader aby wszystko było bardzo proste do rozbudowania bez integracji w pliki które już będą. Chciałbym aby nazwy kontrolerów były możliwe do tłumaczenia na różne języki, czyli chyba najlepiej jak będą trzymane w bazie danych ?

Generalnie chcę aby był porządek, aby pliki klas, widoku, kontrolerów i modeli dla zalogowanych były oddzielone od tych przeznaczonych dla dostępu publicznego.

Prosiłbym tutaj o jakieś wskazówki doświadczonych programistów wink.gif

P.S. Większość powie żebym skorzystał z jakiegoś gotowego frameworka biggrin.gif Ale chciałbym na początek nauczyć się MVC bez gotowych rozwiązań żeby lepiej ogarnąć OOP i MVC smile.gif
!*!
1. po co chcesz tłumaczyć nazwy kontrolerów na inne języki?
2. MVC nie ma nic wspólnego z poziomem dostępu.
3. ściągnij cakephp, codeigniter i obadaj jak jest tam rozwiązany układ katalogów, generalnie zawsze jest tak że wszytko idzie przez index, pliki główne php trzymasz nad public_html, a pliki "web (img/css/js)" w nim.
Elber
AD. 1 Po to by była możliwość przetłumaczenia aplikacji na inny język wraz z adresami url smile.gif Np. strona.pl/kalendarz/dodaj tak by było dla języka PL a dla EN strona.pl/calendar/add smile.gif

AD. 2 tak wiem że nie ma, chodzi mi tylko o ułożenie struktury katalogów rady jak dobrze ogarnąć dostęp do panelu dla zalogowanych bo on będzie miał całkiem inny wygląd i funkcjonalność niż strefa widoczna dla wszystkich

AD. 3 to że wszystko idzie przez index.php też wiem smile.gif a z rady o podglądzie jak to jest we frameworkach skorzystam smile.gif

Nachodzi mnie jeszcze jedno pytanie, jak np. w wordpressie jest rozwiązane wyświetlanie menu w panelu admina ? bo wgrywając jakiś moduł często pojawiają się tam nowe pozycje, menu te jest trzymane w bazie ? Czy jak to działa ?
Spawnm
AD. 1 a nie lepiej przetłumaczyć uri przed routingiem? wink.gif
Elber
No tak o to mi chodziło ;D Źle to określiłem, w bazie byłaby trzymana nazwa oryginalna i przetłumaczona, czyli w momencie przetwarzania url'a wyciągnąłbym nazwę oryginalna która jest przypisana do tej przetłumaczonej wink.gif Generalnie ma to prawo bytu czy to zły pomysł / Inaczej się to robi ?
!*!
Cytat(Elber @ 11.05.2013, 18:59:20 ) *
AD. 1 Po to by była możliwość przetłumaczenia aplikacji na inny język wraz z adresami url :) Np. strona.pl/kalendarz/dodaj tak by było dla języka PL a dla EN strona.pl/calendar/add :)

To nie kontroler, a reguły routera, a raczej uri chcesz tłumaczyć ;)

Cytat(Elber @ 11.05.2013, 18:59:20 ) *
AD. 2 tak wiem że nie ma, chodzi mi tylko o ułożenie struktury katalogów rady jak dobrze ogarnąć dostęp do panelu dla zalogowanych bo on będzie miał całkiem inny wygląd i funkcjonalność niż strefa widoczna dla wszystkich

Kontroler dla admina jest inny niż kontroler na użytkownika tak samo jak ich widoki.

Cytat(Elber @ 11.05.2013, 18:59:20 ) *
Nachodzi mnie jeszcze jedno pytanie, jak np. w wordpressie jest rozwiązane wyświetlanie menu w panelu admina ? bo wgrywając jakiś moduł często pojawiają się tam nowe pozycje, menu te jest trzymane w bazie ? Czy jak to działa ?

System rozszerzeń. Zakładając że masz tablicę do której dodajesz nazwy rozszerzeń jakie instalujesz i które sa aktywne i na tej podstawie generujesz menu. A jak chcesz się czegoś nauczyć i ma być to dobre, to nie patrz na WP ;)
destroyerr
Cytat
Kontroler dla admina jest inny niż kontroler na użytkownika tak samo jak ich widoki.

Kontroler może być przecież ten sam.
Elber
Czyli system rozszerzeń trzymać lepiej w bazie czy na tablicy ? Generalnie o menu mi chodzi smile.gif

A jak rozgraniczyć ładowanie konkretnych kontrolerów dla public i private w głównym routerze ?

Poprzeglądałem frameworki i stwierdzam że jakoś żaden nie wydaje się być jakoś w miarę fajnie prosty i przejrzysty (tu odnoszę się do tego co ja chcę uzyskać, bo ogólnie nie można im nic zarzucić biggrin.gif)

Może ktoś zdradzi jak układa katalogi dla małych aplikacji z 2 poziomami dostępu ?
Spawnm
Główny katalog /Controller dla publicznych, katalog /Controller/Admin dla kontrolerów dla admina.
Oczywiście w /Controller pojawiają się inne katalogi jeśli trzeba, jednak są objęte innymi prawami dostępu.
Elber
Ok a jak z Routerem w takim wypadku ? np. jeśli $_GET['url'] == 'admin' to lecimi wyszystko dla admina a jak nie czyli else to public ?
!*!
Cytat
Kontroler może być przecież ten sam.

Dla usera i panelu admina? Słaby pomysł.

Cytat
Ok a jak z Routerem w takim wypadku ? np. jeśli $_GET['url'] == 'admin' to lecimi wyszystko dla admina a jak nie czyli else to public ?

Nie specjalnie... Szczerze mówiąc nie wyobrażam sobie korzystanie z GET w przypadku nawet minimalnego FW. Poczytaj o URI.

zakładając że Twój URL wygląda tak
Cytat


To router powinien wiedzieć że URI pasuje do jego deklaracji
  1. 'show/article/[0-9]' => array('controller' => 'App\Controllers\Article', 'method' => 'showArticle', 'param'=>'$1')
destroyerr
Cytat
Dla usera i panelu admina? Słaby pomysł.

Niby czemu? Jaka jest pomiędzy nimi różnica? Przekazuje ten sam model do różnych widoków to dlaczego tworzyć osobne. Dodatkowo zgodne z założeniami Twórców tego wzorca.
!*!
@destroyerr - jeśli panelem jest dodatkowa opcja "usuń" przy formularzu dodawania komentarzy itp. to tak. Inaczej to wygląda jak panel jest "osobną" aplikacją.
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.