Laravel 自定义 Asgard CMS 菜单 类

Laravel Asgard CMS Menu with Custom Classes

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

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

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

在他们的文档中,他们说通过创建一个 Presenter 你可以做到这一点。但是,当我创建一个名为 CustomPresenter.php 的 Presenter 和一个名为 CustomPresenter 的 class 扩展 Pingpong/menus/Presenters/Presenter.php 时,将它放在 /vendor/xxx/ 下并通过 [=19= 调用它]在我的 blade、Laravel 中给出 Class 'XXX\CustomPresenter' not found 错误。

这是我在 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;
        ;
    }
}

来自official documentation

To register this new presenter you need to add it to the package configuration (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',
);

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

你需要 dump-autoload 通过 composer

composer dump-autoload

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

php artisan vendor:publish

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

祝你好运