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();
}
我是这样解决这个问题的:
- 删除 EasyAdmin 3
composer remove admin
- 安装附加包。
composer require "easycorp/easyadmin-bundle":"^2.3"
- 更新包。
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
上访问管理员
我在本地安装了全新的 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();
}
我是这样解决这个问题的:
- 删除 EasyAdmin 3
composer remove admin
- 安装附加包。
composer require "easycorp/easyadmin-bundle":"^2.3"
- 更新包。
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
上访问管理员