When it comes to disciplining my son I find the following help/useful:
1). Consistency- for example, we have a rule that he can not ride any bicycle or scooter unless he is wearing a hooter; and at first he use to try and get on his bike and ride away with a helmet, or would wear the helmet and then half way through riding his bike try and take it off.
But every time I firmly reminded him, 'no helmet, no bicycle,'; and then would take the bicycle away or take him off the bicycle and remind him, 'no helmet, no bicycle,' it did produce some spectacular tantrums at times but it works.
Now when he sees people riding bicycles without helmets he shouts at them, ' naughty- no helmet, no bicycle,' which can be a bit embarassing!
2). Being firm helps, letting him now that you are the on in charge...and this is doable without smacking....for example, my son has just started to go into a shop, pick things up and decide he wants it. I will tell him yes or no, and if no why, i.e. because he already has one at home etc.
If he still insists on walking out of the shop with it, I take it away from him and put it back on the shelf- if this prompts a tantrum, I calmly pick him up and take him out of the shop.
3). Warnings help- so, for example, I warn him that if he pushes his friend one more time, or throws that toys on more time (this is on the 2nd time) then he will have 'time out,' or the toy will be taken away. Then if he persists he or the toy get taken away regardless of the tantrum they produce (I am lucky though, my son tends to save the huge tantrums for at hme, any he has outside tend to be more manageable).
4). I try to keep raising my voice for serious or dangerous situations, i.e. trying to step onto the road- and that makes him realise how serious I am.
5). Distraction helps too.
This is what I do- and is not me trying to publish the 'right' way or the 'only' way- it's just what has worked for us, w/out needing to smack or use physical means of discipline.