Component Driven Development is an modern approach to handle separation of concern.
One important thing to note is that separation of concerns is not equal to separation of file types. In modern UI development, we have found that instead of dividing the codebase into three huge layers that interweave with one another, it makes much more sense to divide them into loosely-coupled components and compose them. Inside a component, its template, logic and styles are inherently coupled, and collocating them actually makes the component more cohesive and maintainable.https://vuejs.org/v2/guide/single-file-components.html#What-About-Separation-of-Concerns
This approach does not necessarily have to be applied only for the client side development, it can be adapted to server side programming too. If you are using Laravel, you can create custom components. Alternatively, you can also look into this phpx example which is framwork agnostic.