标签: symfony-routing

如何更改树枝模板在路由生成中使用的主机?

好的,所以我有一个带有动作的控制器和与之相关的2条路线:

/**
 * @Route("/index/preview/", name="mybundle.preview_index")
 * @Route("/", name="mybundle.index")
 * @Template
 */
public function indexAction(Request $request)
{
    $preview = ($request->get('_route') === 'mybundle.preview_index');
    $host = $request->getHttpHost(); //domain.com
    if(!$preivew){
        $host = 'domain2.com';
    }
    return array(
        'preivew' => $preview,
        'host' => $host,
        'basePath' => $preview?'mybundle.preview_':'mybundle.',
    );
}
Run Code Online (Sandbox Code Playgroud)

然后我想根据主机在树枝模板内生成一条路由:

{{ path(basePath~'index') }}
//Then somehow pass the host to this so that i get the intended domain
Run Code Online (Sandbox Code Playgroud)

如果我使用预览路由访问此路由,则将得到:

domain.com/index/preview/
Run Code Online (Sandbox Code Playgroud)

但是,如果我不这样做,它将给我:

domain2.com/
Run Code Online (Sandbox Code Playgroud)

我尝试过的

  • 从控制器内部设置路由器上下文,但这不会更改树枝中生成的路由

symfony twig symfony-routing

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

Symfony2路由:导入所有控制器的注释但是排除一个(NelmioApiDoc中的重复路由)

问题

当我们定义routing.yml:

my_controllers:
    resource: "@MyBundle/Controller/"
    type:     annotation
    prefix:   /
Run Code Online (Sandbox Code Playgroud)

和:

my_api:
    resource:    'MyBundle\Controller\ApiController'
    type:        rest
    prefix:      /api
    name_prefix: my_api_
    options:
        expose: true
Run Code Online (Sandbox Code Playgroud)

我们得到重复的路线NelmioApiDoc:

在此输入图像描述

这个问题

我们应该如何做到这一点,以便路由ApiController不会重复?

  • ApiController从"通配符"资源导入中排除?
  • 单独导入所有其他控制器?
  • 其他方案?

symfony symfony-routing

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

Symfony2 Route只在整数时获取参数

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

一条路线是:

Profile_user_profile:
    path:    /profile/{id}
    defaults: { _controller: ProfileBundle:Users:profile }
    methods: [get]
Run Code Online (Sandbox Code Playgroud)

第二是:

Profile_accept_connection_proposal:
    path:    /profile/acceptProposal
    defaults: { _controller:ProfileBundle:Users:acceptConnectionProposal }
    methods: [put]
Run Code Online (Sandbox Code Playgroud)

没有方法的第一条路线:[get]听取并[put]请求并在它到达路由定义之前捕获第二个url.如果url是数字,是否有定义检查参数的方法.

symfony symfony-routing

3
推荐指数
2
解决办法
3209
查看次数

将路由限制为Ajax调用,可以在Symfony 2.6+中使用吗?

我正在寻找实现Ajax调用的"自动"路由限制的最佳方法.现在我做的如下:

/**
 * @Secure(roles="IS_AUTHENTICATED_FULLY")
 * @Route("/someRoute", name="someRoute")
 * @Method("POST")
 */
public function eliminarFacturasAction(Request $request)
{
    $response['success'] = false;
    $status              = 400;

    if ($request->isXmlHttpRequest()) {
        // needs to set $response values and $status=200 all the time
    } else {
        // needs to handle the exception and return Json response
    }

    return new JsonResponse($response, $status ?: 200);
}
Run Code Online (Sandbox Code Playgroud)

为了避免这种情况,我可以使用它吗?

 @Route("/someRoute", 
           name="routeName", 
           condition="request.headers.get('X-Requested-With') == 'XMLHttpRequest'"
 )
Run Code Online (Sandbox Code Playgroud)

我使用jQuery作为JS框架所以XMLHttpRequest不会成为一个问题.如果没有通过Ajax调用执行路由,将触发什么样的异常?我可以抓住它并向用户显示消息吗?或者显示某种404页面?

我在这里发现了一个类似的问题,但对我来说根本不清楚

php ajax jquery symfony symfony-routing

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

将路由从旧格式迁移到新格式,其中的文档在哪里?失踪?

也许你可能会注意到我之前的帖子,我正在使用SF2.0.x应用程序到新的SF2.7.现在我有很多,NOTICE他们不会影响应用程序的功能,但它会这样做,我想防止这种情况.我已阅读SF Book,路由组件以及@ Route和@Method注释中的路由章节,但找不到任何有用的解决方法.所以我需要一些人的帮助.现在,路线看起来像下面的那种(XML格式):

<route id="PDOneBundle_repproject_process" path="/project/{page}/{action}">
    <default key="_controller">PDOneBundle:ProjectDetail:process</default>
    <requirement key="page">\w+</requirement>
    <requirement key="action">add|update|delete</requirement>
    <requirement key="_format">html</requirement>
    <requirement key="_method">POST|GET</requirement>
</route>
Run Code Online (Sandbox Code Playgroud)

以下信息是NOTICE我得到的:

DEPRECATED - 自版本2.2起不推荐使用"_method"要求,将在3.0中删除.请改用setMethods()方法或路径定义中的"methods"选项.

现在定义路线的正确方法是什么?

php symfony symfony-routing symfony-2.7

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

使用命令在Twig模板中的URL的域不正确

在我的Symfony2项目中,我发送电子邮件,其中包含连接到我的网站的链接,例如

<a href="{{ url('login') }}">LOGIN</a>
Run Code Online (Sandbox Code Playgroud)

当我在控制器中使用此模板时,链接很好.

<a href="https://example.com/login">LOGIN</a>
Run Code Online (Sandbox Code Playgroud)

但是,如果我将这个模板用于ContainerAwareCommand带有cron的邮件,它看起来就像

<a href="http://localhost/login">LOGIN</a>
Run Code Online (Sandbox Code Playgroud)

这不好.我怎么想让它发挥作用?

php symfony twig symfony-routing

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

获取 Symfony 服务中的路由名称

我尝试在 Symfony 4 服务中获取当前路由的名称。

路线.yaml

test-route:
    path: /test
    controller: App\Controller\Test::test
Run Code Online (Sandbox Code Playgroud)

服务

class Myservice {

    private $u;

    public function __construct(Utilities $u){

        $this->u = $u;

        $route = getRouteSomehow(); // should return "test-route"
    }
}
Run Code Online (Sandbox Code Playgroud)

我找到了这段代码来抓取路线:

$requestStack->getCurrentRequest()->get('_route');
Run Code Online (Sandbox Code Playgroud)

..但不确定在哪里/如何/注入什么才能使用它。

也许还有一个更简单的。

php symfony symfony-routing php-7 symfony4

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

Symfony的4个全球路由前缀

我在Symfony 4应用程序中找不到有关全局路由前缀的任何信息。我发现的唯一一件事就是用注释控制器@route。但是我不使用注释,并且我需要所有控制器具有相同的前缀。

现在,我可以在S3中像在app/config/routing.yml文件中这样:

app:
    resource: '@AppBundle/Controller/'
    type: annotation
    prefix: /foo
Run Code Online (Sandbox Code Playgroud)

但是S4是没有捆绑的,我不能做同样的事情-我将不得不创建一个不需要的捆绑包。

是否有可能在Symfony 4中完全定义全局路由前缀,否则我最终将为每个单个根前缀/创建自定义路由加载器,特别是如果我在YAML中配置路由时呢?

php symfony symfony-routing symfony4

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

标签 统计

symfony ×8

symfony-routing ×8

php ×5

symfony4 ×2

twig ×2

ajax ×1

jquery ×1

php-7 ×1

symfony-2.7 ×1