Releases: dereuromark/cakephp-shim
2.0.0
CakePHP 4 release
The tool to help ease migration coming from CakePHP 3.x apps.
- Shim Up: With CakePHP 3.x core and some of the shims, you can prepare your app already for 4.x.
- Shim Down: Then, once upgraded, with 4.x core and some more shims you can further minimize required changes until the app works again.
Then you can slowly start refactoring again further while the app is already running again.
Contribute
Feel free to contribute more shims to either CakePHP 3.x or 4.x version branch.
2.0.0-beta
CakePHP 4 compatible pre-release.
Please help to finalize for stable release.
0.7.2
Improvements
CakePHP 2.x maintenance release.
- backward compatibility access to the request object properties
- FormHelper::input() and FormHelper::inputs() FC shims
- TranslateShimBehavior
- TreeShimBehavior updates
1.10.1
Improvements
FC Inflector shim
An Inflector backport has been added as an opt-in replacement for the core one.
Its Inflector::pluralize()
already uses new 4.x behavior:
pluralize()
:index
=>indexes
(instead ofindices
)
You can also configure the core one with custom inflections from your bootstrap, though.
1.10.0
Improvements
- Customizable deprecation output (use your own
E_USER_*
type if needed). - Enabling deprecations is now easier by Configure key
Shim.deprecations
set totrue
. You can also silence specific deprecations. - Added 4.x FC shim + deprecation for
newEntity()
vsnewEmptyEntity()
. - Added 4.x FC shims for BoolType, DecimalType, StringType ORM type handling classes.
- Removed deprecations for 3.7+.
1.9.0
Improvements
Add more 4.x shims:
Controller::referer()
now defaults to true for internal referer only (as per 4.x default).
1.8.3
Improvements
Allow CastTrait to handle empty strings.
This is mainly important when handling request data in controller, as they can be empty strings coming from either data or query.
1.8.2
Improvements
Add CastTrait
This is useful if you want to get your CakePHP 3 plugins to PHPStan level 7 on controller level, as the query input needs to be properly asserted/cast depending on if it is optional or required input (nullable or not).
1.8.1
Improvements
Add read()
method for entities to allow dot syntax convenience access.
$entity->read('tags.0.name')
will return the property if it exists or returns null otherwise.
This compliments the getOrFail()
part which does the opposite (guarantees the path to be present).
1.8.0
Improvements
Allow adding get...OrFail()
methods to Entity classes to have non-nullable return values asserted.
This is needed for chaining, as null-pointer-occurrences should be avoided here.
Just use the trait here:
use Shim\Model\Entity\GetTrait;
class Post extends Entity {
use GetTrait;
...
}
It automatically provides the getters here for you.
// bad (tag could be null)
$tagName = $entity->tag->name;
// good (tag cannot be null as this would throw clear exception)
$tagName = $entity->getOrFail('tag')->name;
This will please both analyzers and IDE as well as throw meaningful exceptions in case the field is not set in the entity as expected in this particular case.
For all nullable cases you can still use the normal property access, of course.
Pro tip: Use the included IdeHelper EntityAnnotator replacement to allow annotations to be added for all of your entities' fields.
/**
* @property int $id
* @property string $title
* @property \Cake\I18n\FrozenTime|null $created
* @property \Tags\Model\Entity\Tag|null $tag
* @method int getIdOrFail()
* @method string getTitleOrFail()
* @method \Cake\I18n\FrozenTime getCreatedOrFail()
* @method \Tags\Model\Entity\Tag getTagOrFail()
*/
class Post extends Entity {
...
}