I\'m working on a PHP based Model-View-Controller structured website. I understand that the Models should deal with business logic, views present HTML (or whatever) to the u
Put shortly, you can use either of these approaches - but you should change them a bit.
Consider this: The models don't really "know" about post, get and whatnot. They should only know about whatever business-related thing they are - in your case a user.
So while approach #1 can be used, you should not access post variables directly from the model. Instead, make the function take an array of parameters which are then used to create the user.
This way you can easily reuse the code, say in a shell script or whatever, where there is no such thing as $_POST.
While the second approach is more verbose in the controller, it's something you could do too. However, perhaps a bit better approach in the style is to use a "service class". The service would have a method, let's say "createUserFromArray", which takes an array and returns a user. Again, you would pass this method the $_POST as parameters - similar to how you should pass them into the function in modified #1.
Only the controller should deal with inputs directly. This is because the controller handles the request, and thus it can know about post.
tl;dr your models should never use superglobals like $_POST directly.