Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best way to implement admin panel in CakePHP

I am trying to move from CodeIgniter to CakePHP and can't figure out the best way to implement an admin panel. In CI I would create two different applications, one for the frontend and one for the admin panel.

After Googling around, I have found three ways to implement admin panel in CakePHP:

  1. Routing - I don't want to use this as I want by Controllers/Models to be separate for frontend and admin panel
  2. Plugin
  3. Two separate apps

Should I use plugin to implement admin panel or should I have separate apps? Any benefits of one over the other?

like image 208
Jatinder Thind Avatar asked Feb 19 '13 16:02

Jatinder Thind


2 Answers

I normally develop the admin/backend as a plugin. This keeps your backend/admin controllers/views/models separated from the frontend and you don't have to jump through hoops to have separate stylesheets, layouts etc.

Another advantage is that both front- and backend are still part of the same application, so if desired, you can share logic/components, for example you'll be able to put helpers that are usable both for front- and backend in another plugin (e.g. plugins/Shared or plugins/Handytexttools) and use those both wherever you want

As a rule of thumb; put components that may be reuseable for other projects in a separate plugin, this way you can just add those plugins to other projects without problems. Keep your plugins simple; it's no problem to create a plugin containing just one or two helpers or models and a few files of JavaScript. This will make it easier to 'cherry pick' the plugins that you need for a project. Once Cake has 'cached' the file-locations of all classes in your plugins, the overhead of separate plugins should be minimal.

Coming back to the 'admin' plugin. Try to only include code specific for this project in your admin plugin and reusable parts in another one (e.g. Generic stylesheets and layouts for admin-panels). You'll be able to start a admin-plugin for your next project with minimal coding

Good luck with your project and enjoy CakePHP

like image 130
thaJeztah Avatar answered Oct 15 '22 04:10

thaJeztah


If you want to keep your controllers and models separate - I'd go with a separate app, although you'll end up with a bunch of duplicate code between the apps (maintenance headache waiting to happen).

My choice would be admin routing and an admin theme.

Enable admin routing in /app/Config/core.php

In AppController beforeFilter():

$this->theme = isset($this->params['admin']) ? "Admin" : "Site";

Move all your site views and assets into /app/View/Themed/Site/

Create your admin themes in /app/View/Themed/Admin

like image 21
RichardAtHome Avatar answered Oct 15 '22 06:10

RichardAtHome