我需要有不同的路由指向同一个包.例如:/ 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并返回正确的路由前缀.
有更好的想法吗?
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实例。
我在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:使用(大)遗留系统,我无法更改网址.
我正在开发一个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)
::更新::
我还没有解决我的问题,但我已经接近并学会了一些提高效率的技巧.
DefaultController.php …
我想配置 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,我会收到 …
我开始玩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)
我正在尝试建立一个索引页面,该页面将打印出API中的所有端点(使用Symfony 4)。
在Symfony 2中,您可以通过容器获得路由器,然后收集路由。但似乎您无法立即使用Symfony 4中的容器。
Google搜索似乎无法产生我想要的精确结果。Symfony 4或类似工具中有其他替代方法吗?
升级到 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) 我的应用程序有问题,我的控制器上声明了几条可以正常工作的路线,但我对其中之一遇到了麻烦。
我使用注释系统来声明此方法的路由(就像我所有有效的路由一样),如下所示:
/**
* 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 错误。
请问,有人可以帮助我了解这个问题的根源吗?
我在尝试使用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就像一个魅力。
这是我测试它的方式:
创建了一个控制器(省略,因为它不相关,任何控制器都可以)
创建了一个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)
debug:router将导致: ---------------- -------- -------- ------ --------------------------
Name Method Scheme Host Path
---------------- -------- -------- ------ --------------------------
_preview_error …Run Code Online (Sandbox Code Playgroud) symfony-routing ×10
symfony ×9
php ×5
symfony4 ×2
annotations ×1
bundle ×1
controller ×1
locale ×1
routing ×1
symfony5 ×1
tx-news ×1
typo3 ×1
typo3-9.x ×1
url ×1