extend from AbstractController