在Documentation for Resource-Bundle之后,我在为新实体的后端设置模板时迷路了。 简短版本:我最终得到一个错误“无法找到模板”AppBundle:Book:Backend:index.twig“。
我创建了一个新的实体“Book”并以正确的方式配置它,实体也存在于数据库中,并且Sylius自动为GET / POST / DELETE准备了路由。
现在我想在后端部分创建一个模板,用于显示所有书籍,还提供编辑和删除功能。
路由工作正常。但是找不到模板。我有什么不对吗?
我做了什么:
1。添加实体
我在App-Bundle中添加了一个名为“Book”的新实体,如文档中所示。
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Sylius\Component\Resource\Model\ResourceInterface;
/**
* Class Book
* @ORM\Entity
* @ORM\Table(name="book")
*/
class Book implements ResourceInterface
{
/**
* @var int
* @ORM\Column(name="id", type="bigint")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=100, nullable=false)
*/
protected $title;
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* @param string $title
* @return Book
*/
public function setTitle($title)
{
$this->title = $title;
return $this;
}
}
2。配置新资源
然后我将“book”配置为app / config / config.yml中的新资源:
sylius_resource:
resources:
app.book:
templates: AppBundle:Book:Backend
classes:
model: AppBundle\Entity\Book
controller: Sylius\Bundle\ResourceBundle\Controller\ResourceController
repository: Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository
我发现我必须配置控制器和存储库。否则,sylius将无法使用自定义模板,因为不会为这些路由分配控制器。
第3。路由到此新资源(仅限后端)
然后我将以下行添加到app / config / routing.yml:
app_book:
resource: |
alias: app.book
section: admin
type: sylius.resource
prefix: /administration
defaults:
_sylius:
permission: false
我将“权限”切换为false,因为Sylius将抛出一个拒绝访问的异常,除非进一步进行RBAC配置(我不知道该怎么做以及哪些情况记录不清楚新模型/实体)。这就是为什么我暂时绕过任何权限检查。
运行php app/console debug:router
将列出我的新实体Book的新路线:
app_book_index GET ANY ANY /administration/books/
app_book_create GET|POST ANY ANY /administration/books/new
app_book_update GET|PUT|PATCH ANY ANY /administration/books/{id}/edit
app_book_show GET ANY ANY /administration/books/{id}
app_book_delete DELETE ANY ANY /administration/books/{id}
4。调用页面
但是当我登录后端(虽然一切正常),并明确调用URL“/ administration / books”时,会发生以下错误:
无法找到模板“AppBundle:Book:Backend:index.twig”。
CRITICAL - 未捕获的PHP异常InvalidArgumentException:“无法执行 找到模板“AppBundle:Book / Backend:index.twig”。“at sylius / ACME /供应商/ symfony的/ symfony的/ SRC / Symfony的/网桥/枝条/ TwigEngine.php 第128行
模板文件位于“AppBundle \ Resources \ Views \ Book \ Backend \ index.html.twig”下,如下面的树形结构所示:
我在这里错了什么?
感谢@gvf,我更新了config.dev并提供了这样的模板属性:
sylius_resource:
resources:
app.book:
templates: AppBundle:Book/Backend
classes:
model: AppBundle\Entity\Book
controller: Sylius\Bundle\ResourceBundle\Controller\ResourceController
repository: Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository
文件树现在看起来像这样:
但这仅适用于更新操作。 Index-Action和show-Action以“找不到模板index.twig / show.twig”结束。将文件名重命名为上述文件名不是有效的解决方案。
如果感兴趣的话,我在github上发布了包含实体和配置文件的测试安装:https://github.com/itinance/sylius_new_entity
我在github上打开了issue。也许有人会澄清。
答案 0 :(得分:2)
修复Sylius的公关正在进行中:https://github.com/Sylius/Sylius/pull/5061 如果有人在寻找答案,请留下一张便条。
或者,您可以为每个操作使用单独的路由:
app_admin_book_index:
path: /administration/books/
methods: [GET]
defaults:
_controller: app.controller.book:indexAction
_sylius:
permission: false
template: book/Backend/index.html.twig
将模板传递到_sylius
template
选项不会受到错误的影响。
答案 1 :(得分:0)
似乎控制器中$ this-&gt; render()的第一个参数正在寻找index.twig模板和名为index.html.twig的模板。
这里有一种形式的客户模板: http://docs.sylius.org/en/latest/bundles/SyliusResourceBundle/show_resource.html
答案 2 :(得分:0)
尝试:
templates: AppBundle:Book/Backend