我正在尝试实现指南中所述的Yii2 RESTful Web服务API。我正在尝试使用高级应用程序模板。问题很简单,当我尝试访问该服务时,我得到的都是404错误。我想开始尝试一些简单的事情,所以我只是要使用一个国家/地区表和关联的ActiveRecord类进行尝试,下面是代码:
这是在frontend / config / main.php的组件配置中:
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'country'],
],
],
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
]
这是frontend / controllers / CountryController.php中的代码:
namespace frontend\controllers;
use yii\rest\ActiveController;
class CountryController extends ActiveController
{
public $modelClass = 'common\models\Country';
}
我所有的ActiveRecord模型(例如国家/地区)都是通用的/模型。
我使用以下方法进行尝试:
curl -i -H "Accept:application/json" "http://myfrontendapp.loc/country"
这是我得到的输出:
HTTP/1.1 404 Not Found
Date: Fri, 31 Oct 2014 22:46:50 GMT
Server: Apache
Content-Length: 205
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /country was not found on this server.</p>
</body></html>
我已经花了很多时间了。我已经调整了设置,阅读了文档,还有很多没有成功。如果有人看到问题所在,请告诉我,谢谢!
最佳答案
您会为默认的UrlRule
行为而烦恼,因为默认的country
行为会使类名复数:与常见的REST约定一致,它足够聪明,可以将名为/countries
的 Controller 转换为名为GET http://myfrontendapp.loc/countries
的复数路由。
尝试GET /countries/12345
,它很可能会正常工作。这也适用于UrlRule创建的所有其他路由,例如$pluralize
或者,如果要禁用此行为,可以将UrlRule的ojit_code设置为false。检查http://www.yiiframework.com/doc-2.0/guide-rest-routing.html以获取更多信息。