laasti / lazydata

为视图提供数据懒加载。可以使用点表示法。

v0.6.5 2020-10-30 14:30 UTC

This package is auto-updated.

Last update: 2024-08-29 04:03:27 UTC


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中没有检查可调用函数是否注册到容器的方法。

贡献

  1. 将其Fork
  2. 创建您的功能分支: git checkout -b my-new-feature
  3. 提交您的更改: git commit -am '添加一些功能'
  4. 推送到分支: git push origin my-new-feature
  5. 提交拉取请求 :D

历史

有关更多信息,请参阅CHANGELOG.md。

鸣谢

作者:Sonia Marquette (@nebulousGirl)

许可

在MIT许可下发布。请参阅LICENSE.txt文件。