In that example, ArticleForm is used to handle any non-GET request. If there's a GET request, I simply pull the data from the Article/Status repositories.
EloquentArticle and EloquentStatus are needed to accomplish that. I don't "re-use" $this->articleform->article
because that's bleed dependencies from the articleform into the controller. If I changed articleform, then the controller would be affected in places where articleform isn't even really used, other than to grab the "article" repository.
It's also very much about making intent clear rather than any over-arching coding principle (other than "clean code" I suppose). It's more explicit to inject dependencies "again", if if they happen to be available via another "injected dependency".
I inject those directly into the controller since it's easier. If I wanted to "protect" my application layer from the HTTP layer (make is so controllers had no knowledge of repositories, etc), I'd probably re-factor my app to have "scenarios", "commands" or "uses cases" in which each scenario has a class (Create new article, get specific article, update article, would each have their own injected dependencies (yes, even if they are available somewhere else).
Overall I'm favoring everything being explicit. I'm avoiding sharing resources (bleeding dependencies). Change it to suit your needs and opinions tho! We're all allowed to code things differently and have different opinions :D
In fact I've come up with the same solution (the "double injection"). However, it seemed a little bit of strange to me and I thought I'd pause and look and what other developers are doing. Then I found yours... :D
But yes, the change part totally makes sense. I probably won't handle it very differently, as I said it's also that what I've come up with, I was just wondering if there is a more elegant way. Having the model twice adds overhead. But I guess there is no good way around it.
Thanks for your reply.
Sign in to participate in this thread!
The Laravel portal for problem solving, knowledge sharing and community building.
The community