Php 为什么我会得到;找不到用于…“的路由”;
你好,这是怎么回事? 这是关于使用symfony2设置路由以及为什么它会生成“找不到路由…” 例如,它看起来是这样的:Php 为什么我会得到;找不到用于…“的路由”;,php,symfony,routing,routes,Php,Symfony,Routing,Routes,你好,这是怎么回事? 这是关于使用symfony2设置路由以及为什么它会生成“找不到路由…” 例如,它看起来是这样的: app\config\routing.yml user: resource: "@UserBundle/Resources/config/routing.yml" prefix: /user/ weather: resource: "@WeatherBundle/Resources/config/routing.yml" prefix:
app\config\routing.yml
user:
resource: "@UserBundle/Resources/config/routing.yml"
prefix: /user/
weather:
resource: "@WeatherBundle/Resources/config/routing.yml"
prefix: /
在我看来,现在一切都是正确的。我们将讨论@WeatherBundle
那我的包裹看起来怎么样?
这是:
.../WeatherBundle/Resources/config/routing.yml
home:
path: /
defaults: { _controller: WeatherBundle:Default:index }
methods: [GET]
show_by_id:
path: /search?{type}={query}
defaults: { _controller: WeatherBundle:Search:id }
requirements:
type: id|city
show_forecast:
path: /forecast?id={query}&{type}={value}
defaults: { _controller: WeatherBundle:Forecast:forecast, type: hours, value: 6 }
requirements:
type: days|hours
value: \d+
methods: [GET]
那么这是正确的吗?我看不到任何错误,或者可能是关于symfony2中的路由我还不知道什么?
现在的问题是:
当我键入地址时:http://localhost/app_dev.php/search?id=6295630
如我们所见,路径是:/search?{type}={query}
其中{type}=id
{query}=6295630
所以最后的形式看起来像:/search?id=6295630
我很确定它会起作用,但它不起作用。它呼吁:
No route found for "GET /search"
404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException »
如果你想看到完整的堆栈跟踪,告诉我。
我在等你的答案 不能通过这种方式将查询字符串添加到路由定义中。不作为管线参数处理。看一看这一部分 然后你应该替换
show_by_id:
path: /search?{type}={query}
defaults: { _controller: WeatherBundle:Search:id }
requirements:
type: id|city
由
并获取控制器中的路线参数值,如所述
代码重构,
- 名为
的操作并不意味着很多>id
WeatherBundle:Search:id
/search?id=6295630
替换为/search/[id | city]/{id}
,您必须
1-将路径更改为:/search/{type}/{id}
2-将您的
show\u by\u id
路线要求更改为:
requirements:
type: id|city
3-将您的行动签名更改为
public function idAction($type, $id)
同样,我认为在这个特定用例中使用查询字符串不是一个好主意。
但是,当您询问使用查询字符串的示例时,这里有一个(取自文档):
假设您有一条具有以下路径的路由/blog/{page}
。调用/blog/2?category=Symfony
会将category
参数(作为查询字符串)附加到路由中
然后,您可以通过调用
$request->query->get('category')在控制器中访问此参数
(其中,$request
表示当前已处理的请求)您不能以这种方式将查询字符串添加到路由定义中。不作为管线参数处理。看一看这一部分
然后你应该替换
show_by_id:
path: /search?{type}={query}
defaults: { _controller: WeatherBundle:Search:id }
requirements:
type: id|city
由
并获取控制器中的路线参数值,如所述
代码重构,
- 名为
的操作并不意味着很多>id
WeatherBundle:Search:id
/search?id=6295630
替换为/search/[id | city]/{id}
,您必须
1-将路径更改为:/search/{type}/{id}
2-将您的
show\u by\u id
路线要求更改为:
requirements:
type: id|city
3-将您的行动签名更改为
public function idAction($type, $id)
同样,我认为在这个特定用例中使用查询字符串不是一个好主意。
但是,当您询问使用查询字符串的示例时,这里有一个(取自文档):
假设您有一条具有以下路径的路由/blog/{page}
。调用/blog/2?category=Symfony
会将category
参数(作为查询字符串)附加到路由中
然后,您可以通过调用
$request->query->get('category')在控制器中访问此参数
(其中,$request
表示当前已处理的请求)您不能以这种方式将查询字符串添加到路由定义中。不作为管线参数处理。看一看这一部分
然后你应该替换
show_by_id:
path: /search?{type}={query}
defaults: { _controller: WeatherBundle:Search:id }
requirements:
type: id|city
由
并获取控制器中的路线参数值,如所述
代码重构,
- 名为
的操作并不意味着很多>id
WeatherBundle:Search:id
/search?id=6295630
替换为/search/[id | city]/{id}
,您必须
1-将路径更改为:/search/{type}/{id}
2-将您的
show\u by\u id
路线要求更改为:
requirements:
type: id|city
3-将您的行动签名更改为
public function idAction($type, $id)
同样,我认为在这个特定用例中使用查询字符串不是一个好主意。
但是,当您询问使用查询字符串的示例时,这里有一个(取自文档):
假设您有一条具有以下路径的路由/blog/{page}
。调用/blog/2?category=Symfony
会将category
参数(作为查询字符串)附加到路由中
然后,您可以通过调用
$request->query->get('category')在控制器中访问此参数
(其中,$request
表示当前已处理的请求)您不能以这种方式将查询字符串添加到路由定义中。不作为管线参数处理。看一看这一部分
然后你应该替换
show_by_id:
path: /search?{type}={query}
defaults: { _controller: WeatherBundle:Search:id }
requirements:
type: id|city
由
并获取控制器中的路线参数值,如所述
代码重构,
- 名为
的操作并不意味着很多>id
WeatherBundle:Search:id
/search?id=6295630
替换为/search/[id | city]/{id}
,您必须
1-将路径更改为:/search/{type}/{id}
2-将您的
show\u by\u id
路线要求更改为:
requirements:
type: id|city
3-将您的行动签名更改为
public function idAction($type, $id)
同样,我认为在这个特定用例中使用查询字符串不是一个好主意。
但是,当您询问使用查询字符串的示例时,这里有一个(取自文档):
假设您有一条具有以下路径的路由/blog/{page}
。调用/blog/2?category=Symfony