通过rewriteMap进行重写Block Model 层的问题

文档问题 · LOVE520 · 于 6年前 发布 · 2673 次阅读

目的:我想重写首页这个文件,如下图: 做法步骤开始: 我按照手册上的做法,不知道有没有问题,大家给给意见! 第一步,我在项目fecshop下面的common/config下面的创建一个新的文件YiiRewriteMap.php,原本是没有的。,如下图: 第二步,打开YiiRewriteMap.php文件,代码如下: 第三步,在fecshop/appfront/local/local_modules下创建文件夹Cms/block/home,然后在home文件夹下创建文件Index.php,代码跟如下:

可是最终发现,这个Index.php文件并没有被重写,我想请问一下,这是什么原因,还有我那一步做错了,请大神们指点一下,这里先谢谢你们了。

共收到 8 条回复
water#16年前 0 个赞

1.rewriteMap的功能是最近加上去的,也就半个月左右,最省劲的方法你您完全重新安装

2.您也可以不重新安装,您需要把fecshop进行升级,升级文档参看:http://www.fecshop.com/doc/fecshop-guide/develop/cn-1.0/guide-fecshop-about-update.html 升级后,vendor文件夹下面的文件是最新的,但是,根目录的本地文件是无法升级的,您需要手动更改。

首先,@appfront/web/index.php 添加代码:

/**
 * Yii 重写block controller model等
 * 也就是说:除了compoent 和services,其他的用RewriteMap的方式来实现重写
 * 重写的类可以集成被重写的类
 */ 
$yiiRewriteMap = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../config/YiiRewriteMap.php'),
    require(__DIR__ . '/../../common/config/YiiRewriteMap.php')
);
if(is_array($yiiRewriteMap) && !empty($yiiRewriteMap)){
	Yii::$rewriteMap = $yiiRewriteMap;
}

添加完的index.php的全部代码为:

<?php

error_reporting(E_ALL || ~E_NOTICE); //除去 E_NOTICE 之外的所有错误信息
#ini_set('session.cookie_domain', '.fancyecommerce.com'); //初始化域名,
$http = ($_SERVER['SERVER_PORT'] == 443) ? 'https' : 'http';
$homeUrl = $http.'://'.$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['SCRIPT_NAME']), '\\/');
/**
 * fecshop 使用合并配置(config)数组进行加速,true 代表打开。
 * 打开配置加速开关前,您需要执行 http://domain/index-merge-config.php 进行生成单文件配置数组。
 * 注意:打开后,当您修改了配置,都需要访问一次上面的链接,重新生成单文件配置数组,否则修改的配置不会生效
 * 建议:本地开发环境关闭,开发环境如果访问量不大,关闭也行,如果访问量大,建议打开
 */
$use_merge_config_file = false;

defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'prod');

require __DIR__.'/../../vendor/autoload.php';
require __DIR__.'/../../vendor/fancyecommerce/fecshop/yii/Yii.php';

require __DIR__.'/../../common/config/bootstrap.php';

require __DIR__.'/../config/bootstrap.php';

if ($use_merge_config_file) {
    $config = require '../merge_config.php';
} else {
    $config = yii\helpers\ArrayHelper::merge(
        require(__DIR__.'/../../common/config/main.php'),
        require(__DIR__.'/../../common/config/main-local.php'),
        require(__DIR__.'/../config/main.php'),
        require(__DIR__.'/../config/main-local.php'),
        // fecshop services config
        require(__DIR__.'/../../vendor/fancyecommerce/fecshop/config/fecshop.php'),
        // fecshop module config
        require(__DIR__.'/../../vendor/fancyecommerce/fecshop/app/appfront/config/appfront.php'),

        // thrid part confing

        // common modules and services.
        require(__DIR__.'/../../common/config/fecshop_local.php'),

        // appadmin local modules and services.
        require(__DIR__.'/../config/fecshop_local.php')

    );
}

$config['homeUrl'] = $homeUrl;

/**
 * yii class Map Custom 
 */ 
$yiiClassMap = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../config/YiiClassMap.php'),
    require(__DIR__ . '/../../common/config/YiiClassMap.php')
);
if(is_array($yiiClassMap) && !empty($yiiClassMap)){
	foreach($yiiClassMap as $namespace => $filePath){
		Yii::$classMap[$namespace] = $filePath;
	}
}

/**
 * Yii 重写block controller model等
 * 也就是说:除了compoent 和services,其他的用RewriteMap的方式来实现重写
 * 重写的类可以集成被重写的类
 */ 
$yiiRewriteMap = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../config/YiiRewriteMap.php'),
    require(__DIR__ . '/../../common/config/YiiRewriteMap.php')
);
if(is_array($yiiRewriteMap) && !empty($yiiRewriteMap)){
	Yii::$rewriteMap = $yiiRewriteMap;
}

/*
 * 添加fecshop的服务 ,Yii::$service  ,  将services的配置添加到这个对象。
 * 使用方法:Yii::$service->cms->article;
 * 上面的例子就是获取cms服务的子服务article。
 */
new fecshop\services\Application($config['services']);
unset($config['services']);

$application = new yii\web\Application($config);
$application->run();

更换了代码,您需要创建 @appfront/config/YiiRewriteMap.php ,示例代码如下:


return [
    /**
     * \fecshop\models\mongodb\Category 为原来的类
     * \appfront\local\local_models\mongodb\Category 为重写后的类
     * 重写后的类可以集成原来的类。
     */
    '\fecshop\models\mongodb\Category'  => '\appfront\local\local_models\mongodb\Category',
];
LOVE520#26年前 0 个赞

我这个是>=1.1.3.5,这个是最新的吗

LOVE520#36年前 0 个赞

然而手册上是"fancyecommerce/fecshop": ">=1.1.2.9",请问也需要升级吗?

LOVE520#46年前 0 个赞

这个是我的composer.json参数

water#66年前 0 个赞

@LOVE520 #4楼 将fecshop的1.1.3.5改成 1.1.4.3,然后保存退出,在根目录执行composer update

如果不熟悉,最笨的办法就是全部重装:http://www.fecshop.com/doc/fecshop-guide/develop/cn-1.0/guide-fecshop-about-hand-install.html

composer global require "fxp/composer-asset-plugin:^1.3.1"
composer create-project fancyecommerce/fecshop-app-advanced  fecshop 1.0.4.1
cd fecshop
composer update    
./init
LOVE520#76年前 0 个赞

这个简单,谢谢啊

LOVE520#86年前 0 个赞

我试试结果如何

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