Reputation: 986
I come from a Codeigniter background. At the moment I am building a CMS in Laravel.
What I would like to know is how can I separate the backend and frontend in Laravel?
In Codeigniter i use to make two controller Admin_Controller and Front_Controller.
Article extends Admin_Controller
Article extends Front_Controller
and the file structure looked like this
controller
--admin
---user
---blog
---news
--user
--blog
--news
for admin controller I make separate folder and front end controller remain in root of controller folder.
Should I use the same logic in Laravel or is there a better way to do it?
Upvotes: 10
Views: 17758
Reputation: 15653
You can certainly do it the two controllers way or if you like even more separation (and a more 'laravel' way), write your front end and backend as separate packages (previously called bundles in Laravel 3).
They basically behave like standalone applications within your main app. They can have their own routes, models, controllers etc. You can also write 'core code' at the main application level which can be shared across the packages.
If you are moving to Laravel as you want to learn a new framework, then you should definitely try and get a handle on packages - very powerful.
If you are being 'made' to move to Laravel, or have some time pressure, just do it as you have normally done. Laravel is flexible and will be fine either way you do it.
For more info, see the docs.
Laravel current version (4 at time of writing) - http://laravel.com/docs/packages
Laravel 3 - http://three.laravel.com/docs/bundles
Upvotes: 2
Reputation: 87719
If you want to create thinks like Taylor Otwell and 'the core' is trying to teach people do things in Laravel, this is a good start:
Your files could be organized as
├── app
│ ├── ZIP
│ │ ├── Controllers
│ │ │ ├── Admin
│ │ │ │ ├── Base.php <--- your base controller
│ │ │ │ ├── User.php
│ │ │ │ ├── Blog.php
│ │ │ │ ├── News.php
│ │ │ ├── Front
│ │ │ │ ├── Base.php <--- your base controller
│ │ │ │ ├── User.php
│ │ │ │ ├── Blog.php
│ │ │ │ ├── News.php
Configure a PSR-0 or PSR-4 (better) to autoload your classes:
"psr-0": {
"ZIP": "app/"
},
Create namespaces to all tour classes, according to your source tree:
<?php namespace ZIP\Controllers\Admin
class User extends Base {
}
<?php namespace ZIP\Controllers\Front
class Blog extends Base {
}
And create your base controllers
<?php namespace ZIP\Controllers\Admin
use Controller;
class Base extends Controller {
}
Upvotes: 35