This document discusses new features in CakePHP version 2.2 related to view blocks, JSON and XML views, improved hashing performance, date/time utilities, and scoped logging. It provides examples of using view blocks to keep HTML DRY, creating JSON views, benchmarking hash performance improvements over sets, using the new CakeTime and CakeNumber utilities, and attaching loggers with scopes to filter log messages.
2. PACKING IN THE GOOD
2.0.0 was release October 18, 2011
Since then 2.1, 2.2, and 2.3 have been released or started.
Over 20 releases since 2.0.0.
Highest release velocity ever for CakePHP.
3. FOCUS ON PROBLEMS
We've tried to keep releases focused on solving real world problems
developers have everyday.
Make upgrading as easy as possible.
4. VIEW BLOCKS
PROBLEM
Multiple similar views would often contain repeated structural
HTML.
Apps suffered from element-itis to keep HTML DRY.
Piles of elements make code hard to follow and understand.
5. Inspired by blocks in Jinja/Twig.
Allows you to create slots/blocks in layouts or parent templates.
Helps keep views/layouts more DRY by letting you create
extensible HTML content.
Replaces annoying magic variables like $ c i t _ o _ a o t
srpsfrlyu
and $ o t n _ o _ a o t
cnetfrlyu.
9. JSON & XML VIEWS
PROBLEM
Previously creating JSON and XML views that just serialized data
was a pain.
Tons of repetitive views and layout files required.
10. Two view classes that allow you to easily serialize data for simple
uses.
Special _ e i l z view variable defines which view variables
sraie
should be serialized.
You can also use normal view files if you need to massage data first.
Integrates well with existing features like exception handling and
RequestHandlerComponent.
11. EXAMPLE
<pp
?h
/ I acnrle.
/ n otolr
fnto idx){
ucin ne(
$hs>e(tss,$hs>aiae);
ti-st'ak' ti-pgnt()
$hs>e(_eilz' ary'ak')
ti-st'sraie, ra(tss);
}
12. HASH CLASS
PROBLEM
S t full of inconsistencies. Both in the API and path selector
e is
syntax.
Set::extract() while powerful, is slow and insane inside.
xpath-ish syntax full of un-fixable bugs and not supported in most
methods.
13. Hash implements >90% of Set's API.
All methods have a consistent signature.
The same dot notation features are supported everywhere.
Up to 1.6x faster on extract().
Most methods are faster as well.
18. API CONSISTENCY
Every method takes an array of data as the first argument.
Second argument is always one or more paths.
A consistent API is easier to document, understand and remember.
19. CAKETIME & CAKENUMBER
PROBLEM
T m H l e , N m e H l e and T x H l e have some very
ieepr ubrepr etepr
useful methods.
But they are all trapped in a helper.
20. Expose non HTML related features as a utility library.
Greatly improve timezone handling.
New features for testing & working with datetimes.
22. LOGGING++
PROBLEM
Granular logging based on application section was impossible.
Log messages were simply broadcast to every connected logger.
23. Borrowed idea of logging 'scopes' from python's l g i g
o g n module.
Log messages can be tagged with scopes.
Only loggers interested in those scopes will get scoped messages.
24. ATTACH A LOGGER WITH A SCOPE
<pp
?h
CkLg:ofg'amns,ary
aeo:cni(pyet' ra(
'nie = 'mi'
egn' > Eal
'cps = ary'amns,'iln',
soe' > ra(pyet' blig)
'o = 'akeapecm
t' > mr@xml.o'
);
)
25. LOG MESSAGES WITH A SCOPE
<pp
?h
ty{
r
$aea-poes$amn)
gtwy>rcs(pyet;
}cth(amnEcpin$){
ac Pyetxeto e
CkLg:ro(
aeo:err
'rnato fie '.$-gtesg(,
Tascin ald e>eMsae)
ary'amns,'iln'
ra(pyet' blig)
);
}