如何在没有 symfony 的情况下使用 Twig 路径、表单、资产、路由
How to use Twig path, form, asset, routes without symfony
我有一个自定义的 MVC 网站,我想将这个网站移至 Symfony。
我认为我必须分两部分完成此操作:将模板移至 Twig,然后安装 Symfony。
安装了 Composer,我使用 Twig 和一些 Symfony 包。
我正在努力将模板移动到 Twig,这个很管用。
但是为了赢得时间,我的 Twig 模板必须是完美的,因为我必须更新所有页面。
一切顺利,但我没有找到所有回复。
你知道怎么用吗
- 资产
{{ asset('vendor/.css') }}
-> 作曲家要求 symfony/asset ?
- 路径和路线
{{ path('page.one') }}
- 使用 FormType
{{ form_label(form.login)}}
没有 symfony ?
非常感谢!!!
我不能一次为 Symfony 移动。我必须在没有 Symfony 的情况下使用 Twig 最终代码逐步完成此操作:-)
找到路径的解决方案。
我已经创建了一个 Twig 扩展,这个很管用,我想我也可以做同样的事情
对于资产。
我的扩展代码像调试扩展一样工作:
<?php
namespace Twig\Extension {
use Twig\TwigFunction;
use App\MyApp\Config;
final class MyAppExtension extends AbstractExtension
{
public function getFunctions(): array {
return [
new TwigFunction('path', 'twig_path', ['is_safe' => $isDumpOutputHtmlSafe ? ['html'] : [], 'needs_context' => true, 'needs_environment' => true, 'is_variadic' => true]),
];
}
}
}
namespace {
use App\MyApp\Config;
use Twig\Environment;
use Twig\Template;
use Twig\TemplateWrapper;
function twig_path(Environment $env, $context, ...$vars)
{
ob_start();
$url = [Array_with_my_path];
echo $url[$vars[0]];
foreach ($vars[1] as $key => $param_id) {
echo $param_id;
break;
}
return ob_get_clean();
}
}
在 Twig 中:{{ path('fichiers.view', {'fichierId' : fichier.fichier_id}) }}
与 Symfony 一样 !!!
在我的控制器中:
$loader = new FilesystemLoader(DOCROOT.'templates/');
$twig = new Environment($loader,[
'debug' => true,
'path' => true
]);
$twig->addExtension(new DebugExtension());
$twig->addExtension(new MyAppExtension());
$menu = new Menu($this->controller);
同样的方法适用于资产。 {{ asset('assets/vendor/nova-icons/nova-icons.css') }}
我在独立的 MVC 中找到了 Form 的解决方案。
Link 对于解释如何做的 symfony 文档:https://www.bookstack.cn/read/symfony-v4.3/9e14e755983b348b.md
这有效。
我的问题已经解决了
我有一个自定义的 MVC 网站,我想将这个网站移至 Symfony。
我认为我必须分两部分完成此操作:将模板移至 Twig,然后安装 Symfony。
安装了 Composer,我使用 Twig 和一些 Symfony 包。
我正在努力将模板移动到 Twig,这个很管用。
但是为了赢得时间,我的 Twig 模板必须是完美的,因为我必须更新所有页面。
一切顺利,但我没有找到所有回复。
你知道怎么用吗
- 资产
{{ asset('vendor/.css') }}
-> 作曲家要求 symfony/asset ? - 路径和路线
{{ path('page.one') }}
- 使用 FormType
{{ form_label(form.login)}}
没有 symfony ?
非常感谢!!!
我不能一次为 Symfony 移动。我必须在没有 Symfony 的情况下使用 Twig 最终代码逐步完成此操作:-)
找到路径的解决方案。
我已经创建了一个 Twig 扩展,这个很管用,我想我也可以做同样的事情 对于资产。
我的扩展代码像调试扩展一样工作:
<?php
namespace Twig\Extension {
use Twig\TwigFunction;
use App\MyApp\Config;
final class MyAppExtension extends AbstractExtension
{
public function getFunctions(): array {
return [
new TwigFunction('path', 'twig_path', ['is_safe' => $isDumpOutputHtmlSafe ? ['html'] : [], 'needs_context' => true, 'needs_environment' => true, 'is_variadic' => true]),
];
}
}
}
namespace {
use App\MyApp\Config;
use Twig\Environment;
use Twig\Template;
use Twig\TemplateWrapper;
function twig_path(Environment $env, $context, ...$vars)
{
ob_start();
$url = [Array_with_my_path];
echo $url[$vars[0]];
foreach ($vars[1] as $key => $param_id) {
echo $param_id;
break;
}
return ob_get_clean();
}
}
在 Twig 中:{{ path('fichiers.view', {'fichierId' : fichier.fichier_id}) }}
与 Symfony 一样 !!!
在我的控制器中:
$loader = new FilesystemLoader(DOCROOT.'templates/');
$twig = new Environment($loader,[
'debug' => true,
'path' => true
]);
$twig->addExtension(new DebugExtension());
$twig->addExtension(new MyAppExtension());
$menu = new Menu($this->controller);
同样的方法适用于资产。 {{ asset('assets/vendor/nova-icons/nova-icons.css') }}
我在独立的 MVC 中找到了 Form 的解决方案。
Link 对于解释如何做的 symfony 文档:https://www.bookstack.cn/read/symfony-v4.3/9e14e755983b348b.md
这有效。
我的问题已经解决了