Skip to content

krolow/CobaiaAnnotation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CobaiaAnnotation

Annotations in CakePHP.

Why?

  • Because Annotations are cool!
  • Because We like (or at least I like)
  • Because no make sense repeate over and over the same code in PHP
  • Use PHP array to configure is sux
  • Metadata and Metaprogramming are cool!

Installing

CobaiaAnnotations make usage of composer, so download composer and create your app/composer.json

{
    "name": "testing",
    "require": {
        "php": ">=5.3.0",
        "cakephp/debug_kit" : "*",
        "cobaia/cobaia-annotation": "dev-master"
    },
    "minimum-stability": "dev"
}

It's time to running composer.phar install

After install it's time to load the plugin, open app/Config/bootstrap.php

CakePlugin::load('CobaiaAnnotation', array('bootstrap' => true));

//register filter
Configure::write('Dispatcher.filters', array(
    'AssetDispatcher',
    'CacheDispatcher',
    'CobaiaAnnotation.AnnotationDispatcher'
));

What annotations do we have in CobaiaAnnotation?

@ParamConverter

<?php
App::uses('AppController', 'Controller');

use CobaiaAnnotation\Configuration\Controller\ParamConverter;

class ContentsController extends AppController {
   

    /**
     * @ParamConverter("content", class="Content")
     */
    public function view($content = 1) {
        var_dump($content);
    }

}

ParamConverter will automatically converts the action paramter to data that is in the database.

So for example, using param coverter: call: /contents/view/20

It would be the same as

$content = $this->Content->read(null, $content);

@ViewHandler

<?php
App::uses('AppController', 'Controller');

use CobaiaAnnotation\Configuration\Controller\ViewHandler;

/**
 * @ViewHandler(layout="ajax")
 */
class ContentsController extends AppController {
   
    /**
     * @ViewHandler(view="show")
     */
    public function view() {
    }

    /**
     * @ViewHandler(layout="default")
     */
    public function index() {

    }

}

ViewHandler will take care of your view, forget about $this->layout, $this->render(), just define in the annotation what layout you want to use and also what view, and that's it.

It makes also inheritance so if you define one layout or view in the class DocBlock, the actions will inherit the value.

@ModelLoader, @ComponentLoader, @HelperLoader

<?php
App::uses('AppController', 'Controller');

use CobaiaAnnotation\Configuration\Controller\Loader\ModelLoader;
use CobaiaAnnotation\Configuration\Controller\Loader\ComponentLoader;
use CobaiaAnnotation\Configuration\Controller\Loader\HelperLoader;

/**
 * @ModelLoader({"Content", "Fake"})
 * @ComponentLoader({"Session", "RequestHandler"})
 * @HelperLoader({"Text", "Time", "Number"})
 */
class ContentsController extends AppController {
   

    public function view($content = 1) {
    }

}

@Model, @Component, @Helper will handle to you the load of models, components and helpers, not needed anymore put the attribute of class in your code.

What next?

  • @Route (adding custom routes in your controller)
  • @Auth (allow, deny)
  • @Route (adding custom routes in your controller)
  • @Auth (allow, deny)
  • @Table
  • @HasMany
  • @HasAndBelongsToMany
  • @BelongsTo
  • @Behaviors
  • Check performance with 2 autoloads
  • Cache annotations parsed
  • Add Unit Tests

License

Licensed under The MIT License Redistributions of files must retain the above copyright notice.

Author

Vinícius Krolow - krolow[at]gmail.com

About

Annotations in CakePHP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages