【问题标题】:Standalone Twig forms and custom MVC pattern独立 Twig 表单和自定义 MVC 模式
【发布时间】:2016-11-24 14:57:41
【问题描述】:

只是关于 Twig 独立模板系统的一个非常简单的问题,我将它作为一个包安装在我的私人项目中,这是一个 php MVC,我对 Twig 很满意,但是当涉及到 Forms 时我有点困惑靠它。

基本上,Google 在 Google 之后似乎返回了同样的东西,它需要 Symfony Forms 包来呈现表单,但是在 Twig website 上几乎没有提到 Symfony,老实说,它似乎确实指出它是确实是一个独立的包。

现在的问题是我可以使用纯 html 渲染任何我喜欢的表单,但是一旦我使用任何类型的 Twig 语法来构建表单,它就会在 Twig 错误之后抛出 Twig 错误,并且显然会杀死任何渲染石头死.

所以我安装了 Symfony 表单包,老实说,它似乎与可接受的 MVC 模式背道而驰,除此之外,它简直令人困惑,似乎有点矫枉过正。

有没有人知道我所说的关于 Twig 表单语法是独立的并真正让它工作的经验,或者 Twig 模板中的纯 html 是唯一的选择吗?。

谢谢。

【问题讨论】:

  • 不存在类似“树枝形式”的东西。你说的是symfony表单组件,它只使用twig作为渲染引擎。仅 Twig 仅包含文档中描述的内容。

标签: php forms model-view-controller twig


【解决方案1】:

是的,你可以在没有 Symfony 的情况下使用 Twig,它没有任何神奇之处。 您应该只包含 Twig 自动加载器文件并使用 Twig。我的项目中的一个例子:

include `Twig/Autoloader.php`

//init Twig environment
$loader = new \Twig_Loader_Array($dbAdapter->getTwigNotificationTemplates());
$twig = new \Twig_Environment($loader);
$this->template = $twig->loadTemplate('YourTemplateName');

顺便说一句,这个问题已经在 SO 上被问过了,但是很好的答案没有被标记为答案。在这里: Twig using without Symfony

【讨论】:

  • 感谢您的回复,但您完全错过了我的问题,我已经安装了独立的 Twig 并且可以正常工作(没有 symfony),我遇到的问题是 Twig 表单语法和在我的 html 中呈现表单。 twig 文件,我对纯 html 没有任何问题,但是一旦我使用 Twig 表单语法,就会出现致命错误,Twig 文档在表单上非常稀疏,而且我似乎通过 Google 遇到的信息是 symfony 需要渲染必须由 Symfony 表单构建器运行的表单(即使 Twig 和 Symfony 是由同一个人制作的,这对于独立包来说似乎很奇怪)。
  • 正如上面评论中所指出的,没有任何称为“Twig form”的特殊语法,您能否举一些导致问题的 Twig 代码示例?
  • @MartinJJ 你在这里混合东西。单独的 Twig 不包含任何 form 语法。这种特殊语法是 symfony 框架 (github.com/symfony/twig-bridge) 的一部分,它将独立的 form component 与 twig 作为渲染引擎连接起来。
  • @Yoshi 这就是我几乎已经得出的结论,因此我的问题在这里,但例如 Twig 文档中的宏页面显然与某些“表单语法”有关,但没有给出关于是否它确实是在 Twig 中构建的,或者它需要一个外部包,这让我感到困惑
  • 那是巧合。重复渲染相同的代码块,例如HTML 表单元素,只需稍作改动,就是用户定义宏的一个很好的用例。
【解决方案2】:

好的,经过一段时间在 Twig 模板系统中使用独立的 symfony 表单来渲染表单并且没有真正快速到达任何地方之后,我决定对于我的项目,这只是一个个人项目,我将迈出真正的第一步,进入 OOP 和正确的(但是可以为 Web 应用程序定义)MVC 原则我决定放弃 Symfony 独立组件并从头开始构建我自己的表单构建器类。

我的表单构建器类涵盖了我需要的各种可能性,并保存在 Helpers 目录中,我从单独的控制器类(例如注册)调用它并通过注册模型处理数据。

我实际上对它的结果非常满意,它比 Symfony 和 Twig 处理得更简单,我只需要设置一些错误处理和 XSS 保护等就可以了。

非常感谢贡献者,现在 Symfony 对我的需求来说似乎有点太紧张了,但这并不意味着随着我技能的发展,我不会在以后的某个时候进行一些练习。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多