MVC kontrolörün bir örneği

3 Cevap php

Ben neden ve nasıl bir uygulama bir MVC yaklaşımı kullanmak hakkında bir çok okuma olmuştur. Ben gördüm ve bir Model örnekleri anlamak, ben gördüm ve View örnekleri anlamak .... ama ben hala tür bulanık denetleyici üzerinde oluyorum. Ben gerçekten bir kontrolör (ler) kapsamlı bir yeterince örnek görmek isterim. (PHP mümkün, ancak herhangi bir dil varsa yardımcı olacaktır)

Teşekkür ederim.

PS: Ben nasıl kullanılacağı ve hangi kontrolör karar bir index.php sayfası, bir örneğini görmek durumunda da iyi olurdu.

EDIT: Ben sadece gerçekten OOP'deki bunu gerçekleştirmek için nasıl anlamıyorum, kontrolörün işi ne olduğunu biliyorum.

3 Cevap

Request example

Sizin böyle bir şey koyun index.php:

<?php

// Holds data like $baseUrl etc.
include 'config.php';

$requestUrl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$requestString = substr($requestUrl, strlen($baseUrl));

$urlParams = explode('/', $requestString);

$controllerName = ucfirst(array_shift($urlParams)).'Controller';
$actionName = strtolower(array_shift($urlParams)).'Action';

// Here you should probably gather the rest as params

// Call the action
$controller = new $controllerName;
$controller->$actionName();

Gerçekten temel, ama fikir olsun ... (Ben de denetleyici sınıfını yükleme dikkat etmedi, ama ben o autoloading yoluyla ya da bunu yapmak için nasıl biliyor ya da yapılabilir sanırım.)

Simple controller example (kontrolörleri / login.php):

<?php    

class LoginController
{
    function loginAction()
    {
        $username = $this->request->get('username');
        $password = $this->request->get('password');

        $this->loadModel('users');
        if ($this->users->validate($username, $password))
        {
            $userData = $this->users->fetch($username);
            AuthStorage::save($username, $userData);
            $this->redirect('secret_area');
        }
        else
        {
            $this->view->message = 'Invalid login';
            $this->view->render('error');
        }
    }

    function logoutAction()
    {
        if (AuthStorage::logged())
        {
            AuthStorage::remove();
            $this->redirect('index');
        }
        else
        {
            $this->view->message = 'You are not logged in.';
            $this->view->render('error');
        }
    }
}

Sözde uygulama mantığı - Gördüğünüz gibi, kontrolör uygulamanın "akış" ilgilenir. Bu veri depolama ve sunum hakkında dikkat etmez. Oldukça (şimdiki isteğine bağlı olarak) tüm gerekli verileri toplar ve görünümüne atar ...

Bu biliyorum herhangi bir çerçeve ile işe yaramaz, ama işlevleri yapmak gerekiyordu biliyorum eminim unutmayın.

İşte Joe Stump (digg.com en eski kurşun mimar) tarafından iyi bir makale. Bu makale PHP MVC uygulama üzerinde bir dizi parçasıdır. Link

Bir UI, bir kullanıcı bazı arama kriterleri, uyan kayıtların özetleri bir liste görüntülenir bir ekran ve bir kez kayıt, düzenleme için görüntülenir seçildiğinde, bir ekran girer bir ekran orada ekranlar düşünün. Hatları üzerinde ilk arama ile ilgili bazı mantık var olacak

if search criteria are matched by no records
    redisplay criteria screen, with message saying "none found"
else if search criteria are matched by exactly one record
    display edit screen with chosen record
else (we have lots of records)
    display list screen with matching records

Nerede bu mantık gitmeli? Değil elbette görünümünde veya modeli? Dolayısıyla bu kontrolörün işidir. Kontrolör ayrıca kriterleri alarak ve arama için Modeli yöntemi çağırmak için sorumlu olacaktır.