2010-03-04 8 views
5

Pracuję nad osobistym projektem opartym na PHP i MySQL, i robię trochę badań i bawię się z przepisywaniem. Załóżmy, że mam stronę ...Pisanie podstawowych MVC PHP, nie wiem jak zacząć

http://www.myDomain.com/ 

Chcę mieć index.php lub bootstrap w katalogu głównym domeny. Więc jeśli masz dostęp do ...

http://www.myDomain.com/admin/ 

Będzie on nadal załadować z index.php na najwyższym poziomie domeny, który obsługuje analizowania i ładowanie plików konfiguracyjnych, a przekierowanie użytkownika do właściwej lokalizacji, tworząc ładne linki po drodze.

Gdzie powinienem zacząć od moich badań i edukacji na ten temat? Jestem nieco zagubiony. Dziękuję za poświęcony czas :)


Aktualizacja:

Brzmi jak zrobić chcą zmierzać w kierunku systemu MVC z przednim sterownika. Wszelkie dobre referencje dotyczące pisania własnych ram MVC (byłoby bardzo proste). Szczerze nie chce ciągnąć w Zend Framework w tym czasie (to, luzem go dużo!)

Odpowiedz

2

Zasadniczo przepisujesz każde przychodzące żądanie na numer index.php. Oto przykład .htaccess z ram Kohana:

# Turn on URL rewriting 
RewriteEngine On 

# Protect application and system files from being viewed 
# RewriteRule ^(application|modules|system) - [F,L] 

# Allow any files or directories that exist to be displayed directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Rewrite all other URLs to index.php/URL 
RewriteRule .* index.php/$0 [PT,L] 

Więc przykładem byłyby kierowane do index.php/admin. Następnie możesz spojrzeć na $_SERVER['REQUEST_URI'], aby ustalić, co dalej.

Stosunkowo często stosowany jest pierwszy segment URI jako kontroler, a drugi jako metoda. Tak więc na przykład:

$segments = explode($_SERVER['request_uri'], '/');//array('admin') 

if(isset($segments[0])) 
{ 
    $class = $segments[0].'_controller';//'admin_controller 

    if(isset($segments[1])) 
     $method = $segments[1]; 
    else 
     $method = 'index'; 
} 
else 
{ 
    $class = 'index_controller'; 
    $method = 'index'; 
} 

$controller = new $class; 
$controller->$method(); 

Ten kod nie jest bynajmniej gotowy do produkcji, gdyż umierają gwałtowną śmiercią, jeśli na przykład użytkownik odwiedził URL nieistniejącego kontrolera. Nie robi też miłych rzeczy, takich jak argumenty obsługi. Ale jest to rodzaj idei stojącej za tym, jak działa framework PHP MVC.

Nawiasem mówiąc, inna nazwa tego, co nazywasz bootstrap to front controller. Możesz użyć tego terminu w google, aby znaleźć o wiele więcej informacji na temat wzorca.

+0

Cholera Wiedziałem, że szukam lepszego imienia! Właśnie zacząłem pracować nad projektem w pracy dla Zend Framework, więc jestem zaznajomiony z projektem MVC. – Urda

+1

Znam Kohana 2.3 domyślnie podąża za 'controller/method/argument1/argument2', ale uważam, że jest zbyt mało elastyczny, nawet z plikiem konfiguracyjnym' routes.php'. Sprawdź Kohana 3 - jej trasy są niesamowicie elastyczne i łatwe do zablokowania (jako argumenty odpowiadające '\ d +') itp. – alex

+0

alex: Zgadzam się i nie mogę się doczekać, aby użyć KO3 w moich kolejnych projektach. To był tylko prosty przykład. – notJim

1

Trzeba patrzeć na konfigurując swojego .htaccess wewnętrznie przepisać wszystkie żądania do swojej bootstrap pliku, który may być index.php

Kohana używa tego zrobić to

# Allow any files or directories that exist to be displayed directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Rewrite all other URLs to index.php/URL 
RewriteRule .* index.php/$0 [PT] 

następnie można uzyskać dostęp $_SERVER['REQUEST_URI'] zacząć żądania trasy do kontrolerów.

+0

To wszystko od zera, więc mogę zrobić wszystko, co muszę. Zasadniczo chcę uniknąć pokazywania plików .php i mieć ładną strukturę. Lub rzeczy takie jak domain.com/posts/{ID NUM}/ – Urda

Powiązane problemy