gpt4 book ai didi

php - Symfony 路由组件不路由 url

转载 作者:行者123 更新时间:2023-12-04 14:14:55 25 4
gpt4 key购买 nike

我有像这样的文件夹结构的 mvc php cms:

application
---admin
--------controller
--------model
--------view
--------language
---catalog
--------controller
------------------IndexController.php
--------model
--------view
--------language
core
--------controller.php
//...more
public
--------index.php
vendor
我安装 symfony/router component使用composer json帮助我的路由url:
{
"autoload": {
"psr-4": {"App\\": "application/"}
},
"require-dev":{
"symfony/routing" : "*"
}
}
现在有了路由文件,我在 index.php 中添加了这个路由代码。 :
require '../vendor/autoload.php';
use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;

$route = new Route('/index', array('_controller' => 'App\Catalog\Controller\IndexController\index'));
$routes = new RouteCollection();
$routes->add('route_name', $route);

$context = new RequestContext('/');

$matcher = new UrlMatcher($routes, $context);

$parameters = $matcher->match('/index');
在我的 IndexController 我有:
namespace App\Catalog\Controller;

class IndexController {

public function __construct()
{
echo 'Construct';
}


public function index(){
echo'Im here';
}
}
现在在行动我在这个网址工作: localhost:8888/mvc/index并且看不到结果: Im here索引 Controller 。
symfony 路由 url 如何工作并在我的 mvc 结构中找到 Controller ?感谢您的任何练习和帮助。

最佳答案

请求上下文应填充应用程序的实际 URI。您可以使用 symfony 的 HTTP Foundation 包来填充它,而不是自己尝试这样做:

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\RequestContext;

$context = new RequestContext();
$context->fromRequest(Request::createFromGlobals());

它也记录在这里: https://symfony.com/doc/current/components/routing.html#components-routing-http-foundation

匹配后( $parameters = $matcher->match('/index'); )您可以使用 _controller参数的键来实例化 Controller 并调度 Action 。我的建议是替换最后一个 \使用不同的符号以便于拆分,例如 App\Controller\Something::index .

然后,您可以执行以下操作:
list($controllerClassName, $action) = explode($parameters['_controller']);
$controller = new $controllerClassName();
$controller->{$action}();

这应该与您在 Controller 类中的响应相呼应。

关于php - Symfony 路由组件不路由 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52270417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com