Puh: 040-123 45 67
HTTP määrittelee useita metodeja, joilla on tarkoin määritelty tarkoitus. GET ja POST ovat ne kaikille tutut. REST-rajapintojen myötä PUT, PATCH ja DELETE tulivat mielekkäiksi. On harmillista, että HTML formit eivät kuitenkaan tue luonnollisesti näitä metodeja. Helpoiten ne saa fuskattua piilottamalla parametri HTML sivulle kaavakkeeseen:
<form class="action-bar__form" method="POST" action="/handler">
<input type="hidden" name="_method" value="PATCH">
<button type="submit"
Talleta
</button>
</form>
ja poimimalla se sitten koodissa tuosta parametrista, tässä esimerkiksi PHP koodinpätkä, joka poimii halutun metodin ja kutsuu metodin mukaista käsittelijää. Vastaava toiminnallisuus tietysti löytyy monesta frameworkista valmiinakin, jos sellainen on käytössä.
// Call method handler of page before rendering.
$method = $_SERVER['REQUEST_METHOD'];
if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('_method', $_POST)) {
$method = $_POST['_method'];
unset($_POST['_method']);
}
$handler = 'process' . $method;
$page->$handler(($method == 'GET' ? $_GET : $_POST));
Intuitiivisesti, ja tässä täytynee vuosien kokemuksen merkitä jotakin, tuntuu siltä, että kun on olemassa jokin huolellisesti harkittu ja yleisen suosion saavuttanut arkkitehtoninen ratkaisu, vaikkapa tässä tämä pieni joukko HTTP metodeja, niin sitä kannattaa käyttää.
Ja jos sitä ei systeemi nykyisellään käytä, niin sitä kohti kannattaa refaktoroitua.
Valmiit ajatukset ja mallit ottavat huomioon nekin hankalat tilanteet, johon sinä et vielä ole joutunut, siksi niillä on suurempi painoarvo kuin itse juuri nyt tässä koodatessa keksityillä ratkaisuilla.
Näitä ajatuksia tulee nyt mieleen, kun modernisoitavana on 22 000 riviä vuoden 2011 paikkeilla kirjoitettua PHP koodia sovelluksessa, joka on orgaanisesti kasvanut feature kerrallaan.