我在 Homestead 上运行一个 symfony 应用程序,但是当通过注释添加路由以进行简单操作时它不起作用。
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class BlogController extends AbstractController
{
/**
* @Route("/index",name="blog_index")
*/
public function index(){
dd('Test KO');
}
}
用于路由调试器
vagrant@homestead:~/code/symfony61$ php bin/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_xdebug ANY ANY ANY /_profiler/xdebug
_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
-------------------------- -------- -------- ------ -----------------------------------
Symfony 6 没有预配置的路由注释配置。所以你需要遵循这个简单的步骤:
1- 在 config/routes 文件夹下创建一个 attributes.yaml 文件。
2- 添加以下代码
controllers:
resource: ../../src/FOLDER_NAME_OF_WHERE_YOUR_ROUTER_CLASSES_EXISTS/
type: annotation
3- 使用新语法添加路由注释,例如
#[Route('/inbound', name: 'inbound', methods: 'POST')]
public function inbound(Request $request): Response
{
return new Response('OK', 200);
}
4-如果一切正常,调试你的路线
bin/console debug:router
通常有一个文件:config/routes.yaml,内容为:
controllers:
resource: ../src/Controller/
type: annotation
# (the type: annotation option also applies to attributes...)
参见:https://symfony.com/doc/current/routing.html#creating-routes-as-attributes-or-annotations
PHP8 + Symfony 6 使用 PHP 注释:#[Route('/', name: 'app_index')]
在 symfony 6 和 PHP 8 中,您可以使用 PHP 属性代替 symfony 注释。像这样使用。
#[Route('/index', name: 'blog_index')]
public function blog_index(){
//code..
}
}