fecshop appapi 两处与路由有关的问题

bug问题 · dionyang · 于 6年前 发布 · 2496 次阅读

1.urlManager中指定errorHandler。但源码中没有对应的action。导致报错。建议加一个默认的。

        'errorHandler' => [
            'errorAction' => 'site/error',
        ],

2.appapi使用yii\rest\UrlRule指定采用restful规范访问接口。代码如下:

                //#################
                //# Customer Api ##
                //#################
                [
                    'class' => 'yii\rest\UrlRule',
                    'controller' => 'v1/customer',
                    // 默认开启复数,需要在url后面加一个s,譬如v1/article,默认访问为v1/articles
                    // 如果为false,则url后面不需要加s,譬如v1/article,默认访问为v1/article	,
                    //'pluralize' => false,
                ],

对应关系如下:

    public $patterns = [
        'PUT,PATCH {id}' => 'update',
        'DELETE {id}' => 'delete',
        'GET,HEAD {id}' => 'view',
        'POST' => 'create',
        'GET,HEAD' => 'index',
        '{id}' => 'options',
        '' => 'options',
    ];

然后我直接修改vender里的CustomerController(路径:vendor/fancyecommerce/fecshop/app/appapi/modules/V1/controllers/CustomerController.php,这里直接修改源文件是因为我配置的controllerMap不生效)。 示例如下:

<?php

namespace fecshop\app\appapi\modules\V1\controllers;

use fecshop\app\appapi\modules\AppapiController;
use Yii;

class CustomerController extends AppapiController
{
    public $modelClass;

    public function init()
    {
        //echo
        // 得到当前service相应的model
        $this->modelClass = Yii::$service->customer->getModelName();
        parent::init();
    }

    public function actionIndex(){
        echo 11;exit;
    }

}

这里修改init()是有效的。但我添加actionIndex方法之后,按理说是应该覆盖原有GET请求映射的方法的。但是不起效。访问url:http://appapi.fecshoptest.com/v1/customers 请教一下是什么原因。

另外controllerMap我参照手册示例配的。也不起效。。

controllerMap配置如下: (1)appapi/local/local_modules/V1/controllers/CustomerController.php

<?php
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2017/9/26
 * Time: 下午2:47
 */
namespace appapi\local\local_modules\V1\controllers;

use Yii;

Class CustomerController extends \fecshop\app\appapi\modules\V1\controllers\CustomerController{

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        unset($behaviors['authenticator']);
        return $behaviors;
    }

    public function actionIndex(){
        echo 1;exit;
    }
}

(2)新建appapi/config/fecshop_local_modules/V1.php

<?php
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2017/9/26
 * Time: 下午2:59
 */
return [
    'v1' => [
        'controllerMap' =>[
            'customer'=> 'appapi\local\local_modules\V1\controllers\CustomerController'
        ]
    ]
];

也一并看看 感谢!

共收到 9 条回复
Fecmall#16年前 0 个赞

今天有点忙,明天早上回复下

dionyang#26年前 0 个赞

@Terry #1楼 另外还有两个问题1.如果要在local_modules新增一个控制器的话,怎么控制它的路由映射。2.appapi和appserver的定义

Fecmall#36年前 0 个赞

appapi 和 appserver部分,现在还不完善,您先别用这部分的功能吧

现在在开发appserver,大致还需要1-2个月的时间,完善下文档,然后回来在完善appapi。

这两部分会存在一些问题,对于appfront apphtml5 appadmin 这三部分是完善的。

dionyang#46年前 0 个赞

@Terry #3楼 好的吧 我先把接口写到appfront里算了

Fecmall#56年前 0 个赞

@dionyang #4楼 你说的接口,就是appserver,目前在开发,演示地址:http://demo.fancyecommerce.com/#/

首页,产品,搜索,分类,这几个页面开发完成,账户中心也快了。

1-2个月应该就开发完了

dionyang#66年前 0 个赞

@Terry #5楼 不好意思 再打扰个问题。想新建一个Controller并且在路由中作映射怎么办。现在即使配置正确也只能重写。

Fecmall#76年前 0 个赞

你去学习下yii2把,在@app/local 里面新建自己的模块,通过配置引入就可以了

Fecmall#86年前 0 个赞

在@app/config/fecshop_local_modules/ 下面加入你新建的modules的配置

然后在@app/local/local_modules里面新建你的模块文件。

具体的详细,你自己研究吧,需要学习Yii2的

dionyang#96年前 1 个赞

@Terry #8楼 成功了。多谢

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics