我是一个转换器,从Yii1到Laravel 5 - 5.1确切地说 - 我有很多问题。
在我的应用程序(“BIRD3”)中,我有一个NodeJS服务器,它使用hprose RPC系统与PHP服务器通信以查询它运行请求并返回结果(PHP服务器是多进程并生成一个每个请求的子流程)。这提出了一些困难;标题,cookies,会话。
在我基于Yii1的应用程序中,我使用了runkit
扩展的开发中分支。但是,正如你所知,这是超级hacky,不干净,依赖性,不是一个聪明的主意。但它在很大程度上起作用了。以下是我所做的一些代码片段:
<?php
// Header.
runkit_function_redefine("headers_sent", '', 'return false;');
runkit_function_redefine(
"header", '$to,$replace=false,$status=200',
'return HttpResponse::header($to);'
);
// We have a custom handler.
runkit_function_redefine(
"setcookie",
'$name,$value,$expire=0,$path="/",$domain=null,$secure=false,$httponly=false',
'return HttpResponse::setcookie($name,$value,$expire,$domain,$secure,$httponly);'
);
// Because...
runkit_function_redefine(
"session_regenerate_id",
'$deleteOld=false',
'return bird3_session_regenerate_id($deleteOld);'
);
现在,为什么我需要这个?简单:Yii没有直接的方法来覆盖会话/标题/ Cookie管理而不需要很好地加载内部接线。使用扩展的派生类覆盖内部依赖关系并不是很容易,并且会大量增加配置文件。
所以我的第一个问题是: Laravel是否允许我扩展一些类,覆盖执行Session和Header和Cookie管理的方法,并增强它以使用我的自定义函数?
接下来,我想知道一些非常重要的事情;模块化。在Yii中,您所要做的就是运行这些命令,并且您已完成创建模块的2/3:
$ mkdir -p protected/modules/myModule
$ echo "<?php class MyModule extends CWebModule {}" > protected/modules/myModule/MyModuleModule.php
......或类似的东西。但是,就这么简单。只需在配置文件中添加一个条目,就可以了。
但是如何将模块的概念整合到Laravel应用程序中呢?我在github上看到了一些项目,他们建议自己“实现模块化”进入Laravel。似乎Laravel 5不支持模块。这有点奇怪。似乎没有能够执行模块的显而易见的“最终”PHP框架。
所以我想知道: 我需要做些什么步骤,有多少步骤: - 实施模块化 - 使用模块化 - 自动将路径放置到模块
接下来是错误处理。 Laravel如何处理错误或异常?我只是在路由器中定义了一个特殊的路由来执行吗?
我知道,这些都是一个单一线程中的大问题。我希望这对SO来说没问题。我只有2个星期的时间,我可以非常自由地编码,我想快速执行切换。我可能会在L5旁边运行Yii1一段时间,直到所有代码都被翻译过来。主要是,我的模型将是我将翻译的最后一个。因为,事实上,Yii1非常好,我很喜欢使用它。但看到它将被弃用是一个无赖。因此,现在比从未有过更好的过渡到Laravel。
提前感谢您的帮助! :)