laasti / lazydata
为视图提供数据懒加载。可以使用点表示法。
v0.6.5
2020-10-30 14:30 UTC
Requires (Dev)
- laasti/response: ~1.2
- league/container: ~2.0.3
- phpunit/phpunit: ^5.7
README
为视图提供数据懒加载。可以使用点表示法。
安装
composer require laasti/lazydata
使用
支持所有PHP可调用函数。要传递参数给调用,使用数组如['my_callable', [/* 参数在这里 */]]。
不使用League\Container
$data = [ 'title' => 'render_title', 'with_arguments' => ['=my_callable', [/* args here */]], 'with_class' => ['=my_class', 'my_function'], //or '=my_class::my_function', 'with_object' => [$object, 'my_function'], 'meta' => function() { return [ 'description' => 'My description' ] } ]; $viewdata = new Laasti\Lazydata\Data($data); $viewdata->set('username', function() {return 'George';}); //You can use dot notation within the lazy loaded data $viewdata->get('meta.description'); //Returns 'My description'
使用过滤器,您可以使用setFilter
定义自己的过滤器或使用接受一个字符串参数的原生PHP函数。
$data = [ 'native_example' => 'strtoupper:test', //I know, it's a stupid example :P 'closure_example' => 'closure:Test', ]; $resolver = new \Laasti\Lazydata\Resolvers\FilterResolver; $resolver->setFilter('closure', function($value) { return md5($value.'MYSALT'); }); $viewdata = new Laasti\Lazydata\Data($data, $resolver); $viewdata->get('native_example'); //Returns 'TEST' $viewdata->get('closure_example'); //Returns '56e29f03228697ad59822c71eb4d7750'
使用league/container
//We need to setup the ContainerResolver that comes with the package $container = new League\Container\Container; $container->add('Laasti\Lazydata\Resolvers\ResolverInterface', 'Laasti\Lazydata\Resolvers\ContainerResolver')->withArgument($container); $container->add('Laasti\Lazydata\Data')->withArguments([[], 'Laasti\Lazydata\Resolvers\ResolverInterface']); $viewdata = $container->get('Laasti\Lazydata\Data);; $container->add('container_key', 'some value'); $viewdata->set('viewdata_key', '=container_key'); $viewdata->get('viewdata_key'); //Returns 'some value' //Returns the value from SomeClass->myMethod();, SomeClass is resolved with the container $viewdata->set('viewdata_callable_key', '=SomeClass::myMethod'); $viewdata->get('viewdata_callable_key'); //Returns the value from SomeClass->myMethod('George'); SomeClass is resolved with the container $viewdata->set('viewdata_callable_args_key', ['=SomeClass::myMethod', ['George']]); $viewdata->get('viewdata_callable_args_key');
如果无法解析调用,ContainerResolver将回退到默认解析器。
注意:不与league/container invokables一起使用。这是由于注册的可调用函数的存储方式造成的限制,公共API中没有检查可调用函数是否注册到容器的方法。
贡献
- 将其Fork
- 创建您的功能分支:
git checkout -b my-new-feature
- 提交您的更改:
git commit -am '添加一些功能'
- 推送到分支:
git push origin my-new-feature
- 提交拉取请求 :D
历史
有关更多信息,请参阅CHANGELOG.md。
鸣谢
作者:Sonia Marquette (@nebulousGirl)
许可
在MIT许可下发布。请参阅LICENSE.txt文件。