新浪SAE云平台之Yii框架应用搭建

本文详细介绍了如何在SAE环境下配置Yii环境,包括获取YII-SAE包、建立新项目、配置文件调整及解决静态资源访问问题等步骤,确保Yii扩展能正常使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看了很多文档,总算是把SAE环境给弄起来了,不过SAE提供的本地环境还是不能友好的运行起来,于是放弃了SAE本地环境,就用自己搭建的Apache环境来运行,再兼容SAE云平台。


获取YII-SAE包:

http://yiisae.sinaapp.com/

或:

http://download.youkuaiyun.com/detail/lsg9012/8392375 (含demo)


建立一个新项目,将demo中配置文件复制过来,需要对原demo 下的 config/main.php 做点更改,将 assetsAction 设置为 'index/assets' ,因为我按原方式导致了使用zii中的Jui时生成的静态资源链接访问不到,后面会提到

//如果是SAE环境下
if(defined('SAE_TMP_PATH'))
{
    //SAE 禁止本地 I/O
    $config['runtimePath'] = SAE_TMP_PATH;
    //class使用SAEDbConnection
    $config['components']['db'] = array(
            'class'=>'SAEDbConnection',
            'charset' => 'utf8',
            'emulatePrepare' => true,
            'enableProfiling'=>true,
            'enableParamLogging'=>true,
            //cache
            'schemaCachingDuration'=>0,
    );
    //index为控制器(defaultController指定),assets为方法
    $config['components']['assetManager'] = array('class' => 'SAEAssetManager','assetsAction'=>'index/assets');
    //缓存
    $config['components']['cache'] = array(
            'class'=> 'SAEMemCache',
            'servers'=>array(
                array('host'=>'localhost', 'port'=>11211, 'weight'=>100),
            ),
        );
		
}

在 defaultController 对应的控制器里添加

public function actions()
{
        return array(
        	'assets'=>array(
			'class'=>'SAEAssetsAction',
		),
        );
}


如果是默认的配置情况下我在一个视图文件中使用了下面这一段代码(Yii扩展)时,则会找不到 ZII 下的静态资源

$this->widget('zii.widgets.jui.CJuiDatePicker', array(
	'name'=>'pub_date',
	'language'=>'zh_cn',
	'options'=>array(
			'showAnim'=>'fold',
			'dateFormat' => 'yy-mm-dd',
			),
	'htmlOptions'=>array(
			"id" => "datepicker",
			"class" => "form-control",
			),
));

上面的代码生成一个Input框可以选择时间,但是会因找不到静态资源而没有产生效果

<!-- Yii扩展生成的资源链接访问是这样的 -->
http://sinaappName.sinaapp.com/site/assets?path=yiisae/framework/web/js/source/jui/js/jquery-ui.min.js

<!-- 实际使用到的访问是这样的(默认的控制器是site,现在用的是index) -->
http://sinaappName.sinaapp.com/index/assets?path=yiisae/framework/web/js/source/jui/js/jquery-ui.min.js


将 config/main.php 文件中 添加一条兼容SAE上的rules

if(defined('SAE_TMP_PATH'))
{
    //设置SAE上的assets
    $config['components']['urlManager']['rules']['assets/<path:.*?>'] = 'index/';
}


另外在 SAEAssetsAction 中将如下的判断前加一个 isset, 避免出现未定义的情况,也可以在入口文件中设置屏蔽Notice

if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag) 
{
     #header('HTTP/1.1 304 Not Modified');
     header('Etag:'.$etag,true,304);
}

这样就修改完成了,Yii扩展可以使用了,如果是将原 assets 文件放在 Storage 上去,那链接是什么样的没试过,

我是直接按上面那样配置了后,就跟平常使用Yii一样开发的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值