jcr*_*oll 19 parameters url routing query-string symfony
也许我错过了一些东西,但似乎没有办法在Symfony2中的路由中定义查询字符串参数,以便它们可以传递到控制器中.
例如,不是生成类似/blog/my-blog-post(来自Symfony2的路由文档)的URI 并将其传递给以下路由:
# app/config/routing.yml
blog_show:
pattern: /blog/{slug}
defaults: { _controller: AcmeBlogBundle:Blog:show }
Run Code Online (Sandbox Code Playgroud)
我宁愿生成像这样的URI /blog?slug=my-blog-post.问题是我找不到任何地方slug在路由配置文件中定义参数(如上面的{slug}对应部分).
也许这是故意的,但是在查询字符串中使用GET参数的最佳做法是什么?
文档确实在使用查询字符串生成URL时提到它们,那么如何将它们传递给控制器?
我可以在哪里找到它们是Symfony2和HTTP Fundamentals:
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();
// retrieve GET variables
$request->query->get('foo');
Run Code Online (Sandbox Code Playgroud)
这是在控制器内使用它们的最佳实践吗?
red*_*rdo 46
在扩展Symfony\Bundle\FrameworkBundle\Controller\Controller的控制器中使用GET/POST参数:
public function updateAction()
{
$request = $this->getRequest();
$request->query->get('myParam'); // get a $_GET parameter
$request->request->get('myParam'); // get a $_POST parameter
...
}
Run Code Online (Sandbox Code Playgroud)
对于不扩展Symfony基本控制器的控制器,将请求对象声明为操作方法的参数,并按上述步骤操作:
public function updateAction(Request $request)
{
$request->query->get('myParam'); // get a $_GET parameter
$request->request->get('myParam'); // get a $_POST parameter
...
}
Run Code Online (Sandbox Code Playgroud)
Nan*_*com 28
您无法在路由配置文件中指定查询字符串参数.您只需从控制器中的$ request对象中获取它们$request->query->get('foo');
(null如果它不存在,则为它).
要生成具有给定参数的路径,您可以在您的枝条模板中执行此操作:
{{ path(route, query|merge({'page': 1})) }}
Run Code Online (Sandbox Code Playgroud)
如果要在控制器中生成路径,就像在链接的文档中一样:
$router->generate('blog', array('page' => 2, 'category' => 'Symfony'));
Run Code Online (Sandbox Code Playgroud)
将生成路由/blog/2?category=Symfony(路由定义中不存在的参数将作为查询字符串传递).
| 归档时间: |
|
| 查看次数: |
73156 次 |
| 最近记录: |