The point is, that the class Request checks all possible fallbacks the first time you call the method `Request::getMethod()` and saves the result in a private variable `Request::$method`. The next time, you call `Request::getMethod()`, the system won't check all the fallbacks but directly give you `Request::$method`.

By calling `Request::setMethod()` we replace the system's original method. This sets `Request::$method` to `null` again, and the fallbacks are checked again, next time the method `Request::getMethod()` is called. This way, it'll then (if no other fallback hits) return the method given in the `_method`-parameter, that's now (by us) set in the `Request::$request` parameter-bag.

And because I don't want to change the real http-method (that can still be POST ...) I call `$request->setMethod($request->getRealMethod())`.