A CakePHP 2 Re-Baker and CMS Plugin
Oven is currently in beta. I would like to get the community's opinion and input
on this project. Open an issue, find me on
twitter or on irc #cakephp as shama
.
This means functionality will change and this plugin may destroy your code. You have been warned.
Oven is a CakePHP plugin that enables you to bake an entire app from a single json recipe file. It allows you to then edit your app as you would normally and later re-bake as needed without overwriting your code. It also includes an easily override-able scaffolding/CMS controlled by your recipe file.
curl https://raw.github.com/shama/oven/master/Console/install.sh | bash -s NewCakeApp
Uses git to download the latest CakePHP & Oven. Replace NewCakeApp
with
whatever folder name you want to install into or remove to install into
your current working folder.
If that doesn't work or if you prefer manual labor then just download or...
git clone git://github.com/shama/oven.git Plugin/Oven && cd Plugin/Oven && git submodule update --init
in a CakePHP 2.x app. Enable the plugin in
app/Config/bootstrap.php
and run the command ./Console/cake oven.init
.
The oven.init
command will setup your Config/core.php
and
Config/database.php
files (if they haven't already been customized). It is
recommended that after you've installed Oven to run this command to init your
app:
./Console/cake oven.init
Oven uses Config/oven.json
as a recipe to build your app. After making edits
to your recipe, run the command:
./Console/cake oven.bake
If you want Oven to continously watch for changes to your recipe then run the command:
./Console/cake oven.watch
At the core of Oven is a nice little PhpBaker lib. It will turn any PHP class into an array. Once a class is represented as an array the fun begins as we can now manipulate the file just like an array. With this we easily can merge two classes with the command:
./Console/cake oven.merge Controller/CommentsController Controller/NewCommentsController
Will merge properties and methods from CommentsController into NewCommentsController. Any conflicts will use the second stated class.
Oven includes an unobtrusive CMS. Use it when you want or override when you only
want to use it partially. To use the CMS, your controllers should extend the
Oven.BasesController
. This will automatically setup the CRUD based on your
recipe.
Your controller can be as simple as:
<?php
App::uses('BasesController', 'Oven.Controller');
class PagesController extends BasesController {
}
With this, if you go to example.com/admin/pages
you'll be able to view, add,
edit and delete your pages. Edit your Config/oven.json
file to modify the
schema or fields displayed in the views.
If you would like to customize the admin views simply set them up as you would
normally in CakePHP (app/View/Pages/admin_edit.ctp
). Oven will detect them and
use yours instead of the core Oven views.
The core Oven view uses view blocks for you to only partially override. For
instance if you would like to update the sidebar links on admin_edit
simply create a view like this:
<?php $this->extend('Oven./Admin/edit'); ?>
<?php $this->start('sidebar'); ?>
<?php echo $this->Html->link('My Custom Link', '/somewhere'); ?>
<?php $this->end(); ?>
It is good practice for your models to extend OvenBase
but not necessarily
required:
<?php
App::uses('OvenBase', 'Oven.Model');
class Page extends OvenBase {
}
This is only required for certain custom fields types such as file
and slug
.
By default there is no Auth implemented into Oven. Handling Auth should be up to you. Although for convenience, if your app uses the CakeDC Users Plugin, Oven will automatically setup the Auth for you (unless you already have a custom Auth in place).
- Make a video walking through Oven
- Instructions/help for creating your own field types
- Instructions/help for using different view types
- Detect if existing CakePHP with install.sh
- Use core CakePHP templates as starting point then merge
- Recipe website to build recipe (use plugins.cakephp.org?) then install it
Upgrade default theme to bootstrap 2- Put ckeditor field type into it's own repo and use something more lightweight
- Make a default file manager
- Multiple recipes
- Plugin baking
- Croogo integration
Copyright 2012 Kyle Robinson Young. Released under a MIT license.