Symfony 5 和 EasyAdmin 3.0 - /admin 路由未找到

Symfony 5 & EasyAdmin 3.0 - /admin route not found

我在本地安装了全新的 Symfony 5 项目,并通过 Symfony CLI 添加了 Easy Admin:

symfony composer req admin

我应该有 /admin 路线,但它不见了

我运行:

symfony console cache:clear

symfony composer dump-autoload

rm -rf var/cache/*

symfony console debug:router
 -------------------------- -------- -------- ------ ----------------------------------- 
  Name                       Method   Scheme   Host   Path                               
 -------------------------- -------- -------- ------ ----------------------------------- 
  _preview_error             ANY      ANY      ANY    /_error/{code}.{_format}           
  _wdt                       ANY      ANY      ANY    /_wdt/{token}                      
  _profiler_home             ANY      ANY      ANY    /_profiler/                        
  _profiler_search           ANY      ANY      ANY    /_profiler/search                  
  _profiler_search_bar       ANY      ANY      ANY    /_profiler/search_bar              
  _profiler_phpinfo          ANY      ANY      ANY    /_profiler/phpinfo                 
  _profiler_search_results   ANY      ANY      ANY    /_profiler/{token}/search/results  
  _profiler_open_file        ANY      ANY      ANY    /_profiler/open                    
  _profiler                  ANY      ANY      ANY    /_profiler/{token}                 
  _profiler_router           ANY      ANY      ANY    /_profiler/{token}/router          
  _profiler_exception        ANY      ANY      ANY    /_profiler/{token}/exception       
  _profiler_exception_css    ANY      ANY      ANY    /_profiler/{token}/exception.css   
  homepage                   ANY      ANY      ANY    /                                  
 -------------------------- -------- -------- ------ ----------------------------------- 
// config/routes/easy_admin.yaml

easy_admin_bundle:
    resource: '@EasyAdminBundle/Controller/EasyAdminController.php'
    prefix: /admin
    type: annotation
symfony console router:match /admin

                                                                                                                       
 [ERROR] None of the routes match the path "/admin"

我错过了什么?

EasyAdminBundle v3 有另一种配置,您不再需要使用 EasyAdminController 资源。

您可以在此处找到更多相关信息

https://github.com/EasyCorp/EasyAdminBundle/blob/master/src/Controller/EasyAdminController.php

这里

https://symfony.com/doc/master/bundles/EasyAdminBundle/dashboards.html

您需要至少创建一个仪表板。尝试:

php bin/console make:admin:dashboard

接下来,您可以创建一个 CrudController:

php bin/console make:admin:crud

https://symfony.com/doc/master/bundles/EasyAdminBundle/dashboards.html

是的,我现在正在读这本书,运行遇到了同样的问题。

首先,确保您的工作目录是干净的(运行 "git status" 并删除 EasyAdminBundle 安装程序所做的所有更改)。

然后运行:

composer require easycorp/easyadmin-bundle:2.*

安装 EasyAdminBundle 版本 2;使用此版本,您可以按照书中所述进行操作。

从 easyadmin 2 迁移到 3 时,似乎没有保留路由名称。一种方法是在 DashboardController 中添加

/**
 * @Route("/admin", name="easyadmin")
 */
public function index(): Response
{
    return parent::index();
}

我是这样解决这个问题的:

  1. 删除 EasyAdmin 3
composer remove admin
  1. 安装附加包。
composer require "easycorp/easyadmin-bundle":"^2.3"
  1. 更新包。
composer update

就我而言

第一

composer remove doctrine/common

然后

 composer require easycorp/easyadmin-bundle v2.3.9 doctrine/common v2.13.3 doctrine/persistence v1.3.8

它对本书有用

正如其他人所说,您需要创建一个仪表板:

php bin/console make:admin:dashboard

然后至少创建一个 crud controller。由于您似乎使用的是 Fast Track 书,因此您需要键入以下命令两次,并为 Comment 和 Conference 创建一个:

php bin/console make:admin:crud

我也在使用 Fast Track 手册,我的文件就是这样结束的。我仍在学习 easy admin3,因此没有提出最佳实践,但这应该使菜单看起来像 Fast Track 屏幕截图中的那样:

src/Controller/Admin/DashboardController.php:

/**
 * @Route("/admin", name="admin")
 */
public function index(): Response
{
    $routeBuilder = $this->get(CrudUrlGenerator::class)->build();

    return $this->redirect($routeBuilder->setController(ConferenceCrudController::class)->generateUrl());
}

public function configureDashboard(): Dashboard
{
    return Dashboard::new()
        ->setTitle('Guestbook');
}

public function configureMenuItems(): iterable
{
    yield MenuItem::linktoRoute('Back to website', 'fa fa-home', 'homepage');
    yield MenuItem::linkToCrud('Conference', 'fa fa-map-marker', Conference::class);
    yield MenuItem::linkToCrud('Comment', 'fa fa-comment', Comment::class);
}

src/Controller/Admin/CommentCrudController.php:

public static function getEntityFqcn(): string
{
    return Comment::class;
}

public function configureFields(string $pageName): iterable
{
    return [
        IdField::new('id')->hideOnForm(),
        TextField::new('author'),
        TextareaField::new('text')->hideOnIndex(), // Removing ->hideOnIndex() will display a link to a text modal
        EmailField::new('email'),
        DateTimeField::new('createdAt')->hideOnForm(),
        ImageField::new('photoFilename', 'Photo')->setBasePath('/uploads/photos')->hideOnForm(),

        AssociationField::new('conference')
    ];
}

src/Controller/Admin/ConferenceCrudController.php

public static function getEntityFqcn(): string
{
    return Conference::class;
}

public function configureFields(string $pageName): iterable
{
    return [
        IdField::new('id')->hideOnForm(),
        TextField::new('city'),
        TextField::new('year'),
        BooleanField::new('isInternational'),
        IntegerField::new('commentCount', 'Comments')->hideOnForm()
    ];
}

并在 src/Entity/Conference.php 中添加了以下内容以使 commentCount 可用:

public function getCommentCount(): int
{
    return $this->comments->count();
}

为了在提交评论时自动生成 createdAt 日期时间,我首先安装了以下包:

$ composer require stof/doctrine-extensions-bundle

然后修改config/packages/stof_doctrine_extensions.yaml:

stof_doctrine_extensions:
    default_locale: en_US
    orm:
        default:
            tree: true
            timestampable: true

最后在 src/Entity/Comment.php 中用以下内容装饰 private $createdAt

/**
 * @var \DateTime
 * @ORM\Column(type="datetime")
 * @Gedmo\Mapping\Annotation\Timestampable(on="create")
 * @Doctrine\ORM\Mapping\Column(type="datetime")
 */
private $createdAt;

对我来说,最清楚和最完整的解释是对@AnnaHowell 的回答 我只会更改您的代码的一部分。 在 src/Controller/Admin/CommentCrudController.php:

 public function configureFields(string $pageName): iterable
{
    $avatar = ImageField::new('photoFilename')->setBasePath('uploads/photos/')->setLabel('Photo');
    $avatarTextFile = TextField::new('photoFilename');
   
     {
        yield     TextField::new('author');
        yield     TextEditorField::new('text');
        yield     TextField::new('state');
        yield     EmailField::new('email');
        yield     DateTimeField::new('createdAt', 'Created')->setFormat('dd-MM-y HH:mm:ss')
                ->setSortable(true)->setFormTypeOption('disabled','disabled');
        if (Crud::PAGE_INDEX === $pageName) {
        yield ImageField::new('photoFilename')->setBasePath('uploads/photos/')->setLabel('Photo');
    } elseif (Crud::PAGE_EDIT === $pageName) {
       yield TextField::new('photoFilename')->setLabel('Photo');
    }      
       
};

因此,我们让管理员不仅可以评估文字,还可以评估照片的相关性。 如果评论的文字很棒,但照片不方便或琐碎怎么办? 管理员可以删除照片的名称(这样照片就看不到了),留下文字评论并发布。

只需将/vendor/easycorp/easyadmin-bundle/src/Resources/public全部复制到public/bundles/easyadmin

简答:

确保您正在使用 HTTPS 访问管理路由。即使管理员路由应该使用 debug:router 命令中的任何方案。

详细解答

相同的情况,可通过 Symfony 4.4 和 Symfony 5.2 以及 Easyadmin 3.2 重现

我发现我正在使用 http (WAMP) 访问我的服务器:

URL Result
http://localhost 200
http://localhost/admin 404

然后我尝试了

symfony console server:start

注意到关于安装证书的警告,安装它并运行再次安装 symfony 服务器。

之后我可以使用 HTTPS,并且可以在 https:///localhost/admin

上访问管理员