我试图在我的symfony2.1项目中使用以下两个包:
我的问题是,这两个捆绑包同时使用knp-menu bundle。 但奏鸣曲需要1.1.x-dev的knp-menu bundle 和braincrafted bootstrap-bundle dev-master。
使用以下编辑器设置,我收到以下错误。 Composer.json:
"sonata-project/admin-bundle": "dev-master", "sonata-project/doctrine-orm-admin-bundle": "dev-master", "sonata-project/intl-bundle": "dev-master", "sonata-project/cache-bundle": "dev-master", "knplabs/knp-menu-bundle": "1.1.x-dev", "braincrafted/bootstrap-bundle": "dev-develop"
错误: KNP \菜单\匹配器\选民\ VoterInterface'在vendor / braincrafted / bootstrap-bundle / Braincrafted / BootstrapBundle / Voter / RequestVoter中找不到
我知道Matcher在早期的knp菜单包版本中并不存在。但如果我将knp菜单包版本更改为:
" knplabs / knp-menu-bundle":" dev-master",
无法安装奏鸣曲管理包。如果我执行命令" composer.phar update"
,则会发生以下错误 Problem 1
- sonata-project/admin-bundle dev-master requires knplabs/knp-menu-bundle >=1.1.0,<2.0.x-dev -> satisfiable by knplabs/knp-menu-bundle 1.1.x-dev, knplabs/knp-menu-bundle 1.1.x-dev, knplabs/knp-menu-bundle v1.1.0.
- sonata-project/admin-bundle dev-master requires knplabs/knp-menu-bundle >=1.1.0,<2.0.x-dev -> satisfiable by knplabs/knp-menu-bundle 1.1.x-dev, knplabs/knp-menu-bundle 1.1.x-dev, knplabs/knp-menu-bundle v1.1.0.
- Can only install one of: knplabs/knp-menu-bundle dev-master, knplabs/knp-menu-bundle 1.1.x-dev.
- Can only install one of: knplabs/knp-menu-bundle dev-master, knplabs/knp-menu-bundle 1.1.x-dev.
- Can only install one of: knplabs/knp-menu-bundle v1.1.0, knplabs/knp-menu-bundle dev-master.
- Installation request for knplabs/knp-menu-bundle dev-master -> satisfiable by knplabs/knp-menu-bundle dev-master.
- Installation request for sonata-project/admin-bundle dev-master -> satisfiable by sonata-project/admin-bundle dev-master.
有人知道如何使用这两种捆绑包或者有没有方法?谢谢你的帮助。
答案 0 :(得分:1)
编辑composer.json并修改参考knp-menu-bundle的行,如下所示: “knplabs / knp-menu-bundle”:“1.1.x-dev”,
它需要一个版本&gt; = 1.1.0,&lt; 2.0.x-dev,它在错误的第一行中说明。
这适合我。
答案 1 :(得分:0)
使用Composer不能同时使用这两个包。实际上你应该在https://github.com/braincrafted/bootstrap-bundle打开一张票并解释情况。他们应该更新项目的composer.json,以允许人们使用当前版本的KnpMenu,而不仅仅是最新版本。
答案 2 :(得分:0)
我找到了一个临时解决方案来使用这两个捆绑包,直到解决了这个ticket。
我在composer.json文件中定义了一个存储库,并操纵了奏鸣曲管理包要求(“knplabs / knp-menu-bundle”:“dev-master”):
"repositories": [
{
"type": "package",
"package": {
"name": "sonata-project/admin-bundle",
"type": "symfony-bundle",
"description": "Symfony SonataAdminBundle",
"keywords": ["Admin Generator", "admin", "sonata", "bootstrap"],
"homepage": "http://sonata-project.org/bundles/admin",
"license": "MIT",
"authors": [
{
"name": "Thomas Rabaix",
"email": "thomas.rabaix@sonata-project.org",
"homepage": "http://sonata-project.org"
},
{
"name": "Sonata Community",
"homepage": "https://github.com/sonata-project/SonataAdminBundle/contributors"
}
],
"require": {
"symfony/http-foundation": ">=2.1,<2.3-dev",
"symfony/form": ">=2.1,<2.3-dev",
"symfony/validator": ">=2.1,<2.3-dev",
"symfony/security-bundle": ">=2.1,<2.3-dev",
"symfony/routing": ">=2.1,<2.3-dev",
"symfony/config": ">=2.1,<2.3-dev",
"symfony/console": ">=2.1,<2.3-dev",
"symfony/twig-bridge": ">=2.1,<2.3-dev",
"twig/twig": ">=1.10,<2.0-dev",
"knplabs/knp-menu-bundle": "dev-master",
"sonata-project/jquery-bundle": "dev-master",
"sonata-project/exporter": "dev-master",
"sonata-project/block-bundle": "dev-master",
"doctrine/common": ">=2.2,<3.0"
},
"require-dev": {
"jms/translation-bundle": "*"
},
"suggest": {
"sonata-project/doctrine-orm-admin-bundle": "dev-master",
"sonata-project/intl-bundle": "dev-master"
},
"autoload": {
"psr-0": {
"Sonata\\AdminBundle": ""
}
},
"target-dir": "Sonata/AdminBundle",
"version": "dev-master",
"source": {
"url": "git://github.com/sonata-project/SonataAdminBundle.git",
"type": "git",
"reference": "0269691d61764798537a2fd3b13bfafbfb387eef"
}
}
}
然后我不得不覆盖admin类中的方法buildSideMenu,因为方法setCurrentUri()不再存在(现在命名为setUri())。我现在所有的管理类都扩展了MyAdmin
abstract class MyAdmin extends Admin
{
/**
* Build the side menu related to the current action
*
* @param string $action
* @param \Sonata\AdminBundle\Admin\AdminInterface $childAdmin
*
* @return \Knp\Menu\ItemInterface|boolean
*/
public function buildSideMenu($action, AdminInterface $childAdmin = null)
{
if ($this->loaded['side_menu']) {
return;
}
$this->loaded['side_menu'] = true;
$menu = $this->menuFactory->createItem('root');
$menu->setChildrenAttribute('class', 'nav nav-list');
$menu->setUri($this->getRequest()->getBaseUrl().$this->getRequest()->getPathInfo());
$this->configureSideMenu($menu, $action, $childAdmin);
foreach ($this->getExtensions() as $extension) {
$extension->configureSideMenu($this, $menu, $action, $childAdmin);
}
$this->menu = $menu;
}
}
我知道这不是最好的解决方案,但它符合我的目的