标签: symfony-routing

同一捆绑不同的路线

我需要有不同的路由指向同一个包.例如:/ mkt/contacts和/ crm/contacts应指向同一个联系人捆绑包.

为什么?我正在开发一个平台(一个symfony2项目),它有许多应用程序(一个营销应用程序,一个CRM应用程序等等.每个应用程序都是一组模块(bundle),其中一些是在应用程序之间共享的(比如ContactsBundle).

我需要做的是共享包的路由前缀是相对于当前应用程序的,所以如果用户在Marketing Application(/ mkt /)中,那么ContactBundle的路由前缀应该是/ mkt/contact.但如果它在CRM应用程序中应该是/ crm/contacts

我想我可以在routing.yml中创建两个路由资源,如下所示:

route1:
    resource: "@Contactundle/Resources/config/routing.yml"
    prefix:   /crm/contact
route2:
    resource: "@ContactBundle/Resources/config/routing.yml"
    prefix:   /mkt/contact
Run Code Online (Sandbox Code Playgroud)

最大的问题是在使用路径功能时的视图中.我如何知道路线的名称?我能想到的唯一可能的解决方案是创建一些twig扩展,它检查当前的pathinfo并返回正确的路由前缀.

有更好的想法吗?

routing bundle symfony symfony-routing

5
推荐指数
1
解决办法
700
查看次数

通过$ _POST请求(而非URL)使用ParamConverter

tu是否可以在Symfony2中使用@ParamConverter批注将通过$ _POST请求发送的参数转换为Entity?

symfony2文档中给出的所有示例都将从路由中定义的参数转换实体。

设置类似的东西:

/**
 * @Route("/")
 * @ParamConverter("user", class="BvStandardServiceBundle:User", options={"id" = "userId"})
 */
public function userAction(User $user)
{
}
Run Code Online (Sandbox Code Playgroud)

如果我使用userId$ _POST参数中的ID调用此路由,则会导致:

无法猜测如何从请求信息中获取Doctrine实例。

php annotations symfony symfony-routing

5
推荐指数
1
解决办法
1424
查看次数

如何在Symfony路由中使用锚点?

我在routing.yml文件中定义了一个路由:

route_name:
    path: "/dashboard#messages/{id}"
Run Code Online (Sandbox Code Playgroud)

但是,当我要求Symfony生成该路线时,我得到:

/dashboard%23messages/12345
Run Code Online (Sandbox Code Playgroud)

如何跳过路由生成的编码部分?或者我如何#在路径定义中转义char?

PS:使用(大)遗留系统,我无法更改网址.

url symfony symfony-routing

5
推荐指数
1
解决办法
1173
查看次数

Symfony 3将所有路由重定向到当前区域设置版本

我正在开发一个symfony应用程序,我的目标是无论用户在哪个页面上都会导航到页面的语言环境版本.

例如,如果用户导航到"/"主页,它将重定向到"/ en /"

如果它们位于"/ admin"页面,它将重定向到"/ en/admin",以便_locale从路径设置属性.

此外,如果他们从用户浏览器访问/ admin,则需要确定区域设置,因为没有确定区域设置,因此它知道要重定向到哪个页面.

目前我的默认控制器如下所示,因为我正在测试.我正在使用开发模式和分析器来测试翻译是否正常工作.

在此输入图像描述

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     * @Route("/{_locale}/", name="homepage_locale")
     */
    public function indexAction(Request $request)
    {
        $translated = $this->get('translator')->trans('Symfony is great');

        // replace this example code with whatever you need
        return $this->render('default/index.html.twig', [
            'base_dir' => realpath($this->container->getParameter('kernel.root_dir').'/..'),
            'translated' => $translated
        ]);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果用户在那里导航,则此当前方法将使用户保持"/",但我希望将其重定向到"/ en /".这也适用于其他页面,如/ admin,或/ somepath/pathagain/article1(/ en/admin,/ en/somepath/pathagain/article1)

我该怎么做?

我读过的参考文献没有帮助:

Symfony2在路由中使用默认语言环境(一种语言的一个URL)

Symfony2路由中的默认语言环境

::更新::

我还没有解决我的问题,但我已经接近并学会了一些提高效率的技巧.

DefaultController.php …

php locale symfony symfony-routing

4
推荐指数
2
解决办法
1万
查看次数

Symfony 默认语言环境未在 URL 中指定

我想配置 Symfonylocale选项,以便我可以成功访问以下路由:

/route
/{locale}/route
Run Code Online (Sandbox Code Playgroud)

目前,我可以访问/{locale}/route并获得我的观点,但是,/route返回一个No route found for "GET /route". 我的配置如下:

#app/config/parameters.yml
parameters:
    locale: en

#app/config/config.yml
parameters:
    app_locales: en|fr
framework:
    translator: { fallback: "%locale%" }
    default_locale: "%locale%"

#app/config/routing.yml
app:
    resource: '@AppBundle/Controller/'
    type: annotation
Run Code Online (Sandbox Code Playgroud)

我的控制器有以下注释:

#src/AppBundle/Controller/Admin/MyController.php
/**
 *
 * @Route(
 *     "/{_locale}/admin/my",
 *     defaults={"_locale":"%locale%"},
 *     requirements={"_locale":"%app_locales%"}
 *     )
 */
class MyController extends Controller
{
    /**
     * @Route("/", name="admin_my_list")
     * @Method("GET")
     */
    public function listAction()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我特别包含locale,则一切正常。如果我排除locale,我会收到 …

symfony symfony-routing

4
推荐指数
1
解决办法
2662
查看次数

Symfony4:找不到“ GET / lucky / number”的路线

我开始玩symfony4。我刚刚创建了新的应用程序并创建了新的LuckyController。它与以这种方式配置的route.yaml一起使用:

lucky:
    path: /lucky/number
    controller: App\Controller\LuckyController::number
Run Code Online (Sandbox Code Playgroud)

使用以下控制器:

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class LuckyController
{
    public function number()
    {
        return new Response('<html><head></head><body>' . rand(111, 999) . '</body></html>');
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我想使用注释。所以我决定评论routes.yaml。以下文档解释了如何在symfony中创建路由,我已经做到了:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class LuckyController extends Controller
{
    /**
     * @Route("/lucky/number")
     */
    public function number()
    {
        return new Response('<html><head></head><body>' . rand(111, 999) . '</body></html>');
    }
}
Run Code Online (Sandbox Code Playgroud)

找不到路线

php controller symfony symfony-routing symfony4

4
推荐指数
2
解决办法
5037
查看次数

Symfony 4打印所有路线

我正在尝试建立一个索引页面,该页面将打印出API中的所有端点(使用Symfony 4)。

在Symfony 2中,您可以通过容器获得路由器,然后收集路由。但似乎您无法立即使用Symfony 4中的容器。

Google搜索似乎无法产生我想要的精确结果。Symfony 4或类似工具中有其他替代方法吗?

php symfony symfony-routing symfony4

4
推荐指数
2
解决办法
795
查看次数

升级到TYPO3 v9.5.14后路由异常

升级到 TYPO3 v9.5.14 后,我们的新闻详情页面崩溃了

Symfony\Component\Routing\Exception\InvalidParameterException

路由“tx_news_pi1_1”的参数“p88bd715a41119d0e8087a5d19cb049”必须匹配“[^/]++”(“”给定)以生成相应的URL。

这是怎么回事?

该站点使用此配置:

  NewsTagPlugin:
    type: Extbase
    limitToPages: [14]
    extension: News
    plugin: Pi1
    routes:
      - routePath: '/{tag-name}'
        _controller: 'News::list'
        _arguments:
          tag-name: 'overwriteDemand/tags'
      - routePath: '/{tag-name}/page/{page}'
        _controller: 'News::list'
        _arguments:
          tag-name: 'overwriteDemand/tags'
          page: '@widget_0/currentPage'
          requirements:
            page: '\d+'
    defaultController: 'News::list'
    defaults:
      page: ''
    aspects:
      page:
        type: IntegerMapper
        start: 1
        end: 5000
      tag-name:
        type: PersistedAliasMapper
        tableName: tx_news_domain_model_tag
        routeFieldName: slug
Run Code Online (Sandbox Code Playgroud)

typo3 symfony-routing tx-news typo3-9.x

4
推荐指数
1
解决办法
514
查看次数

路由重定向无法正常工作(Symfony 3)

我的应用程序有问题,我的控制器上声明了几条可以正常工作的路线,但我对其中之一遇到了麻烦。

我使用注释系统来声明此方法的路由(就像我所有有效的路由一样),如下所示:

/**
 * Do something
 *
 * @Route("/synchro", name="app_synchro")
 */
public function synchroAction(Request $request){
    //code here etc...
}
Run Code Online (Sandbox Code Playgroud)

我用命令检查了它,debug:router所以我知道这条路由存在,我也尝试打印$route并且值很好,但是当我使用以下命令进行重定向时:

return $this->redirectToRoute('app_synchro');

我遇到 404 错误。

请问,有人可以帮助我了解这个问题的根源吗?

symfony symfony-routing

3
推荐指数
1
解决办法
3013
查看次数

为什么 Symfony 5.1 不能识别“routes.php”文件中配置的路由?

我在尝试使用config/routes.phpSymfony 5.1 中的文件配置我的路由时遇到了困难。

根据Symfony 路由文档,我应该能够在 PHP 文件中配置我的路由:

您可以在单独的 YAML、XML 或PHP文件中定义它们,而不是在控制器类中定义路由。主要优点是它们不需要任何额外的依赖。

但实际上,Symfony 仅在我将路由放入文件时才识别路由routes.yaml

在文件routes.php 中配置的路由会导致错误“找不到用于“GET /something”的路由(404 Not Found)”。运行时debug:router,不会列出这些路由。

routes.yaml.

在另一个使用 的项目中Symfony 5.0.8,路由配置 viaroutes.php就像一个魅力。

这是我测试它的方式:

  1. 创建了一个控制器(省略,因为它不相关,任何控制器都可以)

  2. 创建了一个routes.php文件:

//config/routes.php example

use App\Controller;
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;

return function(RoutingConfigurator $routes)
{
    $routes->add('schools_list', '/schools')
        ->controller([Controller\SchoolController::class, 'list'])
        ->methods(['GET']);
};
Run Code Online (Sandbox Code Playgroud)
  1. 运行debug:router将导致:
 ---------------- -------- -------- ------ -------------------------- 
  Name             Method   Scheme   Host   Path                      
 ---------------- -------- -------- ------ -------------------------- 
  _preview_error …
Run Code Online (Sandbox Code Playgroud)

php symfony symfony-routing symfony5

3
推荐指数
1
解决办法
1681
查看次数