Daa*_*aan 2 unix command-line-interface kohana kohana-3.2 kohana-3.3
关于PSR-0的实现以及必须从命令行执行哪些命令,我需要采取哪些步骤从Kohana 3.2升级到3.3?
Unix命令行:
这些是我在Kohana应用程序中实现PSR-0的步骤.
我删除了以下系统/目录:
rm -rf system
Run Code Online (Sandbox Code Playgroud)
在你当前的bootstrap.php中,唯一的变化就是让类以一个upper开头,所以最好保留你的旧引导程序,只需在文件顶部更改以下行:
// Load the core Kohana class
require SYSPATH.'classes/Kohana/Core'.EXT;
if (is_file(APPPATH.'classes/Kohana'.EXT))
{
// Application extends the core
require APPPATH.'classes/Kohana'.EXT;
}
else
{
// Load empty core extension
require SYSPATH.'classes/Kohana'.EXT;
}
Run Code Online (Sandbox Code Playgroud)
从新的kohana发行目录中删除bootstrap.php.现在将所有3.3的文件粘贴到您的旧应用程序:
cp -R path/to/new/kohana/* .
Run Code Online (Sandbox Code Playgroud)
现在将所有控制器和模型移动到大写目录并移除旧目录:
mv application/classes/controller/* application/classes/Controller
mv application/classes/model/* application/classes/Model
rm -rf application/classes/controller application/classes/model
Run Code Online (Sandbox Code Playgroud)
供应商目录在kohana目录的根目录中有一个固定的位置.将您的供应商目录从应用程序/供应商(如果有的话)移动到供应商/
mv application/vendor .
Run Code Online (Sandbox Code Playgroud)
编辑数据库配置文件(例如application/config/database.php),所有"type"属性都应该大写:
return array
(
'default' => array
(
'type' => 'MySQL',
Run Code Online (Sandbox Code Playgroud)
当您使用AUTH orm驱动程序并且已覆盖application/config/auth.php中的配置时,大写驱动程序名称:
return array(
'driver' => 'ORM',
Run Code Online (Sandbox Code Playgroud)
现在是棘手的部分,这些类的所有类名和文件名都应该大写.去班级目录.
cd application/classes
Run Code Online (Sandbox Code Playgroud)
并复制粘贴此命令:
for SRC in `find . -depth`
do DST=`dirname "${SRC}"`/`basename "${SRC}" | sed -e 's/^./\U&/'`;
if [ "${SRC}" != "${DST}" ]
then
[ ! -e "${DST}" ] && mv -T "${SRC}" "${DST}" || echo "${SRC} was not renamed"
fi
done
Run Code Online (Sandbox Code Playgroud)
(来源:http://forum.kohanaframework.org/discussion/comment/73089#Comment_73089)
此命令递归检查所有目录并将文件名大写.转到应用程序目录.
cd ../
Run Code Online (Sandbox Code Playgroud)
现在在模型和控制器(和帮助程序)中,大写所有类名.所以Controller_template_parent必须成为Controller_Template_Parent.我有一些非常低效的命令(所以请贡献).
find ./ -name \*.php -exec sed -i "s/helper_\([a-zA-Z]\+\)/Helper_\u\1/gI" {} \;
find ./ -name \*.php -exec sed -i "s/helper_\([a-zA-Z]\+\)_\([a-zA-Z]\+\)/Helper_\u\1_\u\2/gI" {} \;
find ./ -name \*.php -exec sed -i "s/helper_\([a-zA-Z]\+\)_\([a-zA-Z]\+\)_\([a-zA-Z]\+\)/Helper_\u\1_\u\2_\u\3/gI" {} \;
Run Code Online (Sandbox Code Playgroud)
开头的./是针对所有文件(递归目录),以.php结尾.我在sed命令后面添加了一个"I"以使搜索大小写不敏感.(源命令:https://askubuntu.com/questions/84007/find-and-replace-text-within-multiple-files)
第一个命令将用Helper_Some_thing_here替换helper_some_thing_here.第二个命令会将helper_some_thing_here转换为Helper_Some_Thing_here等.因此,如果您的类名称中包含超过3个下划线,则可以构建自己的命令.
对于以Model_和Controller_开头的类,也需要做同样的事情
find ./ -name \*.php -exec sed -i "s/model_\([a-zA-Z]\+\)/Model_\u\1/gI" {} \;
find ./ -name \*.php -exec sed -i "s/model_\([a-zA-Z]\+\)_\([a-zA-Z]\+\)/Model_\u\1_\u\2/gI" {} \;
find ./ -name \*.php -exec sed -i "s/model_\([a-zA-Z]\+\)_\([a-zA-Z]\+\)_\([a-zA-Z]\+\)/Model_\u\1_\u\2_\u\3/gI" {} \;
find ./ -name \*.php -exec sed -i "s/controller_\([a-zA-Z]\+\)/Controller_\u\1/gI" {} \;
find ./ -name \*.php -exec sed -i "s/controller_\([a-zA-Z]\+\)_\([a-zA-Z]\+\)/Controller_\u\1_\u\2/gI" {} \;
find ./ -name \*.php -exec sed -i "s/controller_\([a-zA-Z]\+\)_\([a-zA-Z]\+\)_\([a-zA-Z]\+\)/Controller_\u\1_\u\2_\u\3/gI" {} \;
Run Code Online (Sandbox Code Playgroud)
现在一些仅使用1个大写字母的类名现在用完整大写字母(Html,Url,Http,UTF8)编写.在整个应用程序中替换它们.
在application/dir中执行此命令:
find ./ -name \*.php -exec sed -i "s/Url::/URL::/gI" {} \;
find ./ -name \*.php -exec sed -i "s/Html::/HTML::/gI" {} \;
find ./ -name \*.php -exec sed -i "s/Http::/HTTP::/gI" {} \;
find ./ -name \*.php -exec sed -i "s/Utf8::/UTF8::/gI" {} \;
Run Code Online (Sandbox Code Playgroud)
当您使用ORM驱动程序时,您的所有Orm :: factory('some_class')应该是大写的并且大写为ORM :: factory('Some_Class').我使用相同的命令来大写所有ORM类并在工厂中大写类名.
find ./ -name \*.php -exec sed -i "s/orm::factory(\(\"\|'\)\([a-zA-Z_]\+\)\(\"\|'\)\(,[^,]*\)*)/ORM::factory('\u\2'\4)/gI" {} \;
find ./ -name \*.php -exec sed -i "s/orm::factory(\(\"\|'\)\([a-zA-Z]\+\)_\([a-zA-Z]\+\)\(\"\|'\)\(,[^,]*\)*)/ORM::factory('\u\2_\u\3'\5)/gI" {} \;
find ./ -name \*.php -exec sed -i "s/orm::factory(\(\"\|'\)\([a-zA-Z]\+\)_\([a-zA-Z]\+\)_\([a-zA-Z]\+\)\(\"\|'\)\(,[^,]*\)*)/ORM::factory('\u\2_\u\3_\u\4'\6)/gI" {} \;
Run Code Online (Sandbox Code Playgroud)
现在我的模块从3.3开始不再兼容了,并非所有模块都升级了.当你想自己升级它们时,你可能需要单独检查它们去每个模块的类目录,大写它的文件和它的类名.您可以使用以前的命令.
对我来说,升级应用程序时这是一个清单,就像我说的那样,请随时提供帮助,以便更轻松地进行升级.
| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |