1

我在我的一个项目中使用 Asgard CMS。

我正在尝试打印带有自定义类的菜单。

默认情况下,{{ Menu::get('main') }}使用 Bootstrap 类打印出主菜单。但是,由于我的主题,我想使用不同的类。

在他们的文档中,他们说通过创建一个Presenter你可以做到这一点。但是,当我创建一个名为extendsCustomPresenter.php的类的 Presenter 时,将它放在下面并在我的刀片中调用它时,Laravel 给出Class 'XXX\CustomPresenter' not found错误。CustomPresenterPingpong/menus/Presenters/Presenter.php/vendor/xxx/{{ Menu::render('main', 'XXX/CustomPresenter') }}

这是我在 CustomPresenter 中使用的代码:

namespace XXX;

use Pingpong\Menus\Presenters\Presenter;

class CustomPresenter extends Presenter
{
    /**
     * {@inheritdoc }
     */
    public function getOpenTagWrapper()
    {
        return  PHP_EOL . '<section class="top-bar-section">' . PHP_EOL;
    }

    /**
     * {@inheritdoc }
     */
    public function getCloseTagWrapper()
    {
        return  PHP_EOL . '</section>' . PHP_EOL;
    }

    /**
     * {@inheritdoc }
     */
    public function getMenuWithoutDropdownWrapper($item)
    {
        return '<li'.$this->getActiveState($item).'><a href="'. $item->getUrl() .'">'.$item->getIcon().' '.$item->title.'</a></li>';
    }

    /**
     * {@inheritdoc }
     */
    public function getActiveState($item)
    {
        return \Request::is($item->getRequest()) ? ' class="active"' : null;
    }

    /**
     * {@inheritdoc }
     */
    public function getDividerWrapper()
    {
        return '<li class="divider"></li>';
    }

    /**
     * {@inheritdoc }
     */
    public function getMenuWithDropDownWrapper($item)
    {
        return '<li>
                <a href="#" class="sf-with-ul">
                 '.$item->getIcon().' '.$item->title.'
                </a>
                <ul style="display: none;">
                  '.$this->getChildMenuItems($item).'
                </ul>
              </li>' . PHP_EOL;
        ;
    }
}
4

2 回答 2

1

来自官方文档

要注册此新演示者,您需要将其添加到包配置 ( config/packages/pingpong/menus/config.php)

是你做的吗?

return array(
    'navbar'        =>  'Pingpong\Menus\Presenters\Bootstrap\NavbarPresenter',
    'navbar-right'  =>  'Pingpong\Menus\Presenters\Bootstrap\NavbarRightPresenter',
    'nav-pills'     =>  'Pingpong\Menus\Presenters\Bootstrap\NavPillsPresenter',
    'nav-tab'       =>  'Pingpong\Menus\Presenters\Bootstrap\NavTabPresenter',
    'zurb-top-bar'  =>  'ZurbTopBarPresenter',
);

文档也没有提到将您的课程放在vendor/xxx目录中。使用 composer 的主要规则是不要vendor手动编辑目录。App\Http\Presenters您应该使用您的应用命名空间(最好是目录)将您的类放在您的应用文件夹中。

于 2016-01-05T19:40:02.460 回答
0

你需要通过作曲家转储自动加载

composer dump-autoload

自动加载命名空间,具体取决于您可能需要做的包

php artisan vendor:publish

如果它确实有任何需要在使用渲染方法之前创建的配置文件。

祝你好运

于 2016-01-05T20:28:33.847 回答