Zawsze irytowało mnie w ZF (i nie tylko w nim), że metody do uruchomienia są jak takie zwykłe pojemniki na kod. Dlaczego nie posiadają one żadnych argumentów. Wszystko się wyciąga z jakichś magicznie powstałych nagle obiektów, które znalazły się kontrolerze (np $this->_request) – skąd on się tu wziął? Inna sprawa to, że “parametry” wyciąga się z funkcji “getParam”. No dobrze, ale skąd ten param? Z adresu? Z posta? geta? cookies? sesji? Skąd to się wzięło. Jest oczywiście to brane z tablicy $_REQUEST o ile mnie pamięć nie myli a ona może być inaczej zbudowana na różnych maszynach i różnych konfiguracjach – np parametry z GET będą przez POST albo odwrotnie. To jest kolejna z rzeczy, która moim zdaniem ułatwia użytkownikowi źle napisać kod. Nie jest tajemnicą, że parametry przesyłane są do PHP za pomocą różnych metod… gdzie najpularniejsze to POST i GET. Parametr w GET i POST może istnieć i mieć taką samą nazwę a służyć do zupełnie innej rzeczy a dodatkowo można jeszcze sztucznie tworzyć parametry przekazywane z requestu. W ZF wygląda to tak:

public function editAction()
{
    $id = $this->_request->getParam('id'); // Ale skąd to Id?
    $title = $this->_request->getParam('title'); // To z geta, posta czy z adresu url?
    $this->view->title = $title;
    $this->view->id = $id;
}
Nowy tytuł to title ?> o id: id ?>

Nie wiadomo skąd się co bierze. Poza tym Zend zakłada, że ja jakiś szablon potrzebuje i musze mu zmienna przekazać, zeby coś odpowiedziec. Ani mi do tej funkcji nic nei “wchodzi” ani z niej nie wychodzi.

Moja idea również zainspirowana django wygląda tak:


// Adres routingu
'article/edit,(?\d+).html => Article.edit

public function edit($request, $id)
{
    // id mam jako argument funkcji z adresu
    $title = $request->getPost('title'); // Aha no to ktoś postem puścił
    return new Response('Nowy tytuł to ' . $title . ' o id: '. $id);
}

Tutaj parametrem wejściowym jest request oraz parametry adresu. Poza tym sam decyduje o tym co odpowiem. Czy skorzystam z szablonu czy chcę po prostu napisac sobie “Hello” i tyle.