[wp-trac] [WordPress Trac] #28216: Allow to register pre-instantiated widgets

WordPress Trac noreply at wordpress.org
Tue Jun 2 17:59:58 UTC 2015


#28216: Allow to register pre-instantiated widgets
-------------------------------+------------------------------
 Reporter:  Denis-de-Bernardy  |       Owner:
     Type:  defect (bug)       |      Status:  new
 Priority:  normal             |   Milestone:  Awaiting Review
Component:  Widgets            |     Version:  3.9.1
 Severity:  normal             |  Resolution:
 Keywords:                     |     Focuses:
-------------------------------+------------------------------

Comment (by mdwheele):

 Replying to [comment:9 westonruter]:
 > OK, I don't have any problem with the proposed change. Can you put
 together a patch, including unit tests?

 If it's not against contribution standards for me to do so, I can prepare
 a patch for this feature. I found this ticket in the process of looking to
 fix the same issue myself.

 To expand upon the use-case for this being made-available to core, I have
 an example:

 I maintain a set of microservices where I work that are responsible for
 serving HR and Student data as well as other use-cases. For this
 particular use-case, we have a service responsible for providing query
 capabilities for a University job-board. This is exposed as a JSON API and
 I have also written packages around that API for PHP-consumption. All this
 leads to... the implementation of a client that talks to that API conforms
 to a known interface and I want to make a WordPress widget that depends on
 that client interface to query the job board.

 The biggest reason for wanting DI support for things like Widgets is that
 I can treat the widgets as simple-wiring of my own services into
 WordPress. I treat Plugins exactly the same; simple-wiring of a domain
 model into WordPress. Therefore, when I test, my focus is on a WordPress-
 agnostic domain model. When I write integration tests with WordPress and
 my custom model, I'm making sure that when a widget is "booted" it calls
 the right methods on my services. I do not necessarily care to invoke my
 services as part of that test... I just want to have spies tell me if
 things aren't called as expected.

 This can certainly be achieved through setter-injection, but is more
 conventional to implement through constructor injection. More importantly,
 constructor injection FIRMLY declares that X widget wiring has a
 dependency on some service layer. Setting injection does not do so
 explicitly.

 '''Anywho...''' I typed all that out just to give a more in-depth use-case
 than we currently had. Also, I've made the changes to enable this and
 would GLADLY contribute upstream.. However, this would be my first
 contribution to core and I wanted to make sure it was cool for a sideline
 observer to send code for someone elses Trac ticket! :)

 Thanks all!

--
Ticket URL: <https://core.trac.wordpress.org/ticket/28216#comment:10>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list