好的,所以我有一个带有动作的控制器和与之相关的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)
我尝试过的
当我们定义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从"通配符"资源导入中排除?我在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是数字,是否有定义检查参数的方法.
我正在寻找实现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页面?
也许你可能会注意到我之前的帖子,我正在使用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"选项.
现在定义路线的正确方法是什么?
在我的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)
这不好.我怎么想让它发挥作用?
我尝试在 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)
..但不确定在哪里/如何/注入什么才能使用它。
也许还有一个更简单的。
我在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中配置路由时呢?