Drupal8中include包含的模板只能放在templates目录下吗?

  在使用drupal8.7.6的过程中,发现凡是模板中使用类似{%include'@cyt/header.html.twig'%}的变量后,当把header.html.twig模板放到cyt/templates/public目录时,重建缓存、刷新并打开首页就会报错“Thewebsiteencounteredanunexpectederror.Pleasetryagainlater.”;当把header.html.twig模板放到cyt/templates/目录时,重建缓存并刷新网页,首页可正常显示。这是怎么会事呢?
 
  观察drupal8.7.6的默认主题目录结构,你会发现,他所有的html.twig模板都放在cyt/templates/目录下,这就印证了使用{%include'@cyt/header.html.twig'%}变量后的header.html.twig模板必须放在cyt/templates/目录下,才能生效。即@cyt/header.html.twig指定的路径是cyt/templates/。
 
  再观察drupal8.7.6中的stable主题的目录结构,你会发现他所有模板都分类放到相关的文件夹中了。至少说明了两个问题:
 
  一是所有.html.twig模板包括header.html.twig模板是可以放到cyt/templates/public这样的目录下的。测试结果验证了白龙的想法,如果要把header.html.twig模板放到cyt/templates/public/目录下,则只需要在模板中使用{%include'@cyt/public/header.html.twig'%}调用即可;如果要把header.html.twig模板放到cyt/templates/private/目录下,则只需要在模板中使用{%include'@cyt/private/header.html.twig'%}调用即可。即:改变@cyt/public、@cyt/private对应的目录结构,就可以改变公共模板内容header.html.twig出现的位置。
 
  二是cyt/templates/下的子目录可以任意命名,用来存放相关模板;drupal8默认是按照实体如block、views、content、user的方式进行命名子目录;相应的,按照中文的习惯,我们可以按照栏目来命名,如front、about、conteat、signup等等。
 
  一般情况中,为了方便网站的后期维护,网站的公共部分如header、footer、sidebar等,我们要把它单独拿出来做成模板,用include来调用,以实现修改一处,就可以达到全站修改的目的。