我试图设置一个细枝过滤器,其工作方式如下:{{entities | fieldnames}},该过滤器将返回一个包含实体对象的属性名称的数组。我的问题是,经过几个小时的阅读和尝试,我无法执行$this-
错误:对/Users/a77/Dropbox/06中的非对象调用成员函数get()。Proyectos/2011 U-Vox/DEV U-Vox/Uvox Web/src/Acme/DemoBundle/Extension/FieldnamesTwigExtension。php第38行
或者如果构造不带=null Error ContextErrorException:Catchable致命错误:传递给Acme\DemoBundle\Extension\FieldnamesTwigExtension::\uuu construct()的参数1必须是Acme\DemoBundle\Extension\Container的实例,没有给定,在
服务。yml
服务:
helpers:
class: Acme\DemoBundle\Services\Helpers
twig.extension.acme.demo:
class: Acme\DemoBundle\Twig\Extension\DemoExtension
arguments: [twig.loader]
acme.demo.listener:
class: Acme\DemoBundle\EventListener\ControllerListener
arguments: [twig.extension.acme.demo]
fieldnames:
class: Acme\DemoBundle\Extension\FieldnamesTwigExtension
arguments: [@service_container]
Extension\FieldnamesTwigExtension。php
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
namespace Acme\DemoBundle\Extension;
class FieldnamesTwigExtension extends \Twig_Extension {
private $container;
public function __construct(Container $container=null)
{
$this->container = $container;
//var_dump ($container); exit; // prints null !!!
}
protected function get($service)
{
return $this->container->get($service);
}
public function getFilters() {
return array(
'fieldnames' => new \Twig_Filter_Method($this, 'fieldnamesFilter'),
);
}
public function getName() {
return 'fieldnames_twig_extension';
}
public function fieldnamesFilter($obj) {
if (is_array($obj)) {
$first = $obj[0];
// GET (HELPERS) NOT WORKING :
$fieldnames = $this->container->get("helpers")->getFieldnames($first);
return $fieldnames;
}
return null;
}
public function twig_array_get_function($array, $name) {
return $array[$name];
}
}
帮手。php
namespace Acme\DemoBundle\Services;
class Helpers {
public function sum($n1, $n2) {
return $n1 + $n2;
}
public function getFieldnames($entities) {
$reflect = new \ReflectionClass($entities[0]);
$props = $reflect->getProperties();
$fieldnames = Array();
foreach ($props as $prop) {
$fieldnames[] = $prop->getName();
}
return $fieldnames;
}
}
AcmeDemoExtension.php
名称空间Acme\DemoBundle\DependencyInjection;
使用Symfony\Component\DependencyInjection\ContainerBuilder;使用Symfony\Component\DependencyInjection\Loader\YamlFileLoader;使用Symfony\Component\HttpKernel\DependencyInjection\Extension;使用Symfony\Component\Config\FileLocator;使用Symfony\Component\DependencyInjection\Definition;//补充
类AcmeDemoExtension扩展了{
public function load(array $configs, ContainerBuilder $container) {
$definition = new Definition('Acme\DemoBundle\Extension\AccessTwigExtension');
$definition->addTag('twig.extension');
$container->setDefinition('access_twig_extension', $definition);
$definition2 = new Definition('Acme\DemoBundle\Extension\FieldnamesTwigExtension');
$definition2->addTag('twig.extension');
$container->setDefinition('fieldnames_twig_extension', $definition2);
$loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
$loader->load('services.yml');
}
public function getAlias() {
return 'acme_demo';
}
}
在扩展\FieldnamesTwigExtension.php中,在use
指令之后调用命名空间
是否正常?
返回哪个错误Symfony?
你太难了。您应该将助手直接注入到您的小树枝扩展中。您还应该在服务中进行标记。yml。不在依赖项注入扩展中。
http://symfony.com/doc/current/cookbook/templating/twig_extension.html
服务。yml
fieldnames:
class: Acme\DemoBundle\Extension\FieldnamesTwigExtension
arguments: [@helpers]
tags:
- { name: twig.extension }
并相应地调整代码的其余部分。
我在我的应用程序上尝试了你的代码,但出现了相同的错误。要解决这个问题:
Acme\DemoBundle\DependencyInjection\AcmeDemoExtension。php
删除以下行:
$definition2 = new Definition('Acme\DemoBundle\Extension\FieldnamesTwigExtension');
$definition2->addTag('twig.extension');
$container->setDefinition('fieldnames_twig_extension', $definition2);
Acme\DemoBundle\Resources\config\services.yml
替换以下行:
fieldnames:
class: Acme\DemoBundle\Extension\FieldnamesTwigExtension
arguments: [@service_container]
作者:
fieldnames:
class: Acme\DemoBundle\Extension\FieldnamesTwigExtension
arguments: [@service_container]
tags: [{ name: twig.extension }]
我正在尝试进行树遍历。(按顺序、按顺序和后顺序)这是我的代码。 我认为我插入值有问题,因为当我运行代码时,输出只是空的。有人能解释一下我哪里出错了吗? 在插入函数m中,将根节点和要插入的项作为参数。 然后我使用malloc创建一个新节点。 将数据插入新节点时,左、右为空,因为左和右当前不指向任何节点。 然后检查根是否为空。 如果为空,则 m 将新节点分配给根节点。 如果root不为空。(我不应该松
我想问一下,是否可以在页面加载上扩展Watson Assistant聊天机器人?目前,当页面加载时,用户必须点击下面的小图标才能启动聊天机器人。 沃森助理聊天机器人图标 我使用的是Chrome,解决方案也应该在移动平台上运行。 到目前为止,我有以下带有聊天机器人脚本的空白页面:
问题内容: 我有一个基类,我想在服务中进行扩展以帮助将数据输入角度范围。我已经在网上搜索了一种解决方案,但是没有找到我喜欢的解决方案。我有一个用于访问设备文件系统的基类 类结构: 我希望能够在几个不同的角度服务(即offlineCart,offlineCustomLists等)中扩展该类,其中每个服务都将能够使用存储库来存储各种不同的数据类型。我正在寻找最好,最合适的方式来做到这一点。在普通Jav
问题内容: 我目前正在使用Selenium来运行Chrome实例来测试网页。每次我的脚本运行时,都会启动一个干净的Chrome实例(清理扩展程序,书签,浏览历史记录等)。我想知道是否可以使用Chrome扩展程序运行脚本。我曾尝试搜索Python示例,但是当我在Google上搜索时什么都没想到。 问题答案: 您应该使用Chrome WebDriver 选项设置要加载的扩展程序列表。这是一个例子: 希
本文向大家介绍使用 iisext.vbs 禁用 Web 服务扩展的方法,包括了使用 iisext.vbs 禁用 Web 服务扩展的方法的使用技巧和注意事项,需要的朋友参考一下 应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1 可以使用命令行脚本 iisext.vbs(存储于 systemro
本文向大家介绍使用 Iisext.vbs 启用Web服务扩展的方法,包括了使用 Iisext.vbs 启用Web服务扩展的方法的使用技巧和注意事项,需要的朋友参考一下 应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1 可以使用命令行脚本 iisext.vbs(存储于 systemroot\s