Create a Plugin-Based System Like Wordpress With Laravel / PHP
<p>This question has been bugging me for quite some time now, I want to create a cms, a School Mnagement System to be more specific, and what matters to me the most, is making this system plugin based, in a way that administrators can download and install plugins right through their admin panel, just like wordpress.</p>

<p>Now I've read about wordpress <strong>Hooks</strong>, <strong>Actions</strong> and <strong>Filters</strong>, and in all honesty i can say i'm just a little familiar with their functionality, but to apply same functionality to a <strong>Laravel App</strong>... , It's a bit hard to figure out, at least for me.</p>

<p>I've also searched about this question and found out that almost everyone is suggesting packages, But while packages can work great for other developers wanting to get use of the package's functionality, they can't be easily installed by a user not familiar with any programming language, And that's exactly what i want in my application.</p>

<p>Now what i have in my mind so far, as in <strong>Wordpress Actions</strong> and <strong>Filters</strong>, almost everything one would want to use in Wordpress theme files ( to make that piece of code flexible for adding plugin functionality ) should be called as functions, and calling that function by Wordpress do_action() is kind of a must-take path, which of course makes sense.</p>

<p>This way plugin developers can just call add_action() / add_filter() in their files and put their plugins into the flow of the application.
So...</p>

<p>Basically what I'm asking here is:</p>

<blockquote>
  <ul>
  <li><strong>How to apply such functionality to a laravel app?</strong></li>
  <li><strong>Is there an easier way than calling everything by a function like do_action()?</strong></li>
  <li><strong>Should i write some kind of a file management module for downloading and updating plugins?</strong></li>
  </ul>
</blockquote>

<p>Again I must say that I am not very familiar with wordpress ways to achieve this kind of functionality, So I may be wrong about some of the description I mentioned above, But please, I appreciate any clarification around this subject if you can.</p>

<p>Thanks in advance for any insight.</p>

<p>*P.S. I've tried to be as clear as I possibly can about the problem, And I'm not looking for any specific method for the system I`m developing.
What i want is to know Common / Best methods ( If there is a best method ) for achieving such functionality, preferably in Laravel, but a general algorithm would still be very appreciated.</p>

<p>I know lots of people have the same question and are tackling with the same issue, so if you even only provide a link to a useful article it would be great.*</p>