if(SAE){ $removeProviders = [ Illuminate\Cache\CacheServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, ]; for($i = 0; $i < count($app['providers']); $i++){ if (in_array($app['providers'][$i], $removeProviders)) { unset($app['providers'][$i]); } } $app['providers'] = array_merge($app['providers'],[ Illuminate\Cloud\SAE\Cache\SaeCacheServiceProvider::class, Illuminate\Cloud\SAE\Session\SessionServiceProvider::class, Illuminate\Cloud\SAE\Storage\StorageServiceProvider::class, Illuminate\Cloud\SAE\Segment\SegmentServiceProvider::class, ]); $app['aliases']['Storage'] = Illuminate\Cloud\SAE\Storage\Storage::class; $app['aliases']['Segment'] = Illuminate\Cloud\SAE\Segment\Segment::class; }
最后再说说SAE专有应用程序实例和Http实例与原生的差别,主要还是本地写的问题。原生的会在应用程序启动时候生成路由、配置、服务提供者、模板编译的相关文件,以此来提升加载速度。但是到了SAE就不行了,所以重写了Application类的部分与路径相关的方法,来把这些文件生成到Storage中,而Http专有内核则是处理启动器中的日志类。具体代码就不贴出来,可以看看项目。
再给一个SAE可以使用的rewrite
handle: - rewrite: if (path ~ "^/$") goto "public/index.php" - rewrite: if(!is_dir() && !is_file() && path~"^(.*)$") goto "public/index.php/$1"
总结
整个移植过程还算是很顺利,得益于Laravel的拓展性与SAE的便利.不过在对于putenv()函数和日志处理的解决方法上,还是实现的不够优雅,希望能有人给出更有优雅的实现方案。然后其他的SAE服务比如分词、邮件、队列等,则可以使用服务提供者自动加载,这个就不多说了。
项目github地址: https://github.com/wh469012917/laravel5-on-sae
软件点击此处本站下载。
更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》