You have keyed the inputs for the phone numbers incorrectly.
See this section in the Cake book for how to create a form that includes hasMany objects: https://book.cakephp.org/3.0/en/views/helpers/form.html#creating-inputs-for-associated-data
As your User hasMany PhoneNumbers these PhoneNumbers will need to be in an array. So your code should look more like:
<?php
echo $this->Form->control('phone_numbers.0.number');
echo $this->Form->control('phone_numbers.0.type');
?>
You could also allow create more inputs so you can add a User with more than one phone number:
<?php
echo $this->Form->control('phone_numbers.0.number');
echo $this->Form->control('phone_numbers.0.type');
echo $this->Form->control('phone_numbers.1.number');
echo $this->Form->control('phone_numbers.1.type');
echo $this->Form->control('phone_numbers.2.number');
echo $this->Form->control('phone_numbers.2.type');
?>
The difference between patchEntity() and save() is that you use patchEntity() to start building up an entity. This entity will only exist in your computer’s memory until you successfully use save() to persist it to the database.