Cakephp:如何使用Twig获取数据库表名列表

Cakephp:如何使用Twig获取数据库表名列表,php,twig,cakephp-3.0,Php,Twig,Cakephp 3.0,我正在使用Twig为cakePHP项目创建一个烘焙模板。我想要的就是使用twig访问数据库的表名及其字段,以基于这些表和字段生成代码 我可以轻松地使用访问表名(但这不是我想要的) 我想写这样的东西 {% set db = ConnectionManager.get('default') %} {% set collection = db.getSchemaCollection() %} {% set listTables = collection.listTables() %} 不能直接在tw

我正在使用Twig为cakePHP项目创建一个烘焙模板。我想要的就是使用twig访问数据库的表名及其字段,以基于这些表和字段生成代码

我可以轻松地使用访问表名(但这不是我想要的)

我想写这样的东西

{% set db = ConnectionManager.get('default') %}
{% set collection = db.getSchemaCollection() %}
{% set listTables = collection.listTables() %}

不能直接在twig中使用PHP类或函数。而且,以这种方式使用它也不是最佳实践

最佳解决方案是:

  • 建议:将您的登录名放入,并将变量传递到twig文件中。请参阅文档中的传递变量部分

  • 另一种方法是编写细枝扩展。一种常见的结构是,编写一个带有一些实用功能的服务时,编写一个细枝扩展作为桥,从细枝访问服务。细枝扩展将使用该服务,您的控制器也可以使用该服务。参考这个答案


  • 实际上,我认为我可以直接在twig中使用PHP类或函数。例如,如果在CakePHP项目中打开默认烘焙模板(vendor/CakePHP/bake/src/template/bake/element/controller/any文件),您将发现可以直接在twig文件中使用一些CakePHP框架函数。我的问题的目的是构建一个用于bake命令的细枝模板。@KarimReda这是因为bake使用一个显式构建的用于CakePHP的模板,并提供细枝扩展,使访问助手和某些函数成为可能。无论是使用Twig还是Bake使用的Twig视图库,都不可能使用随机PHP。但是,您可以轻松地使用事件将变量注入烘焙视图:
    {% set db = ConnectionManager.get('default') %}
    {% set collection = db.getSchemaCollection() %}
    {% set listTables = collection.listTables() %}