With the recent release of the 1.10 version of the Zend Framework, they made a subtle change on how Zend_Tool searches its providers. Before 1.10 the loader (aka the provider discover) was set to be the IncludePathLoader class; what that meens is that if you wrote a new provider, all that you needed to do to have Zend_Tool automatically find it was to edit your PHP’s include_path or add your provider’s directory to the ZEND_TOOL_INCLUDE_PATH_PREPEND environment variable.
Now that is history, because (source):
There were many issues for people when Zend_Tool used a scanning approach to finding providers. This caused many issues on all different platforms. Now we’ve opted to go the specify your providers approach.
(beware: the suggested solution in that post is wrong)
So if you ever write a new tool provider remember that there’s no more “auto discovery” by scanning the path. The loader now is the BasicLoader and you have to explicitely tell Zend_Tool where your providers are and how their classes are named. For this to happen, you can use the zf enable config.provider command or use the zf.ini file.
My solution is:
- create a zf.ini file for your project. This is slighlty different from what the documentation implies; it considers zf.ini to be an hidden file in your $HOME. But this is only a default you can change via the ZF_CONFIG_FILE env variable
- put something like basicloader.classes.0 = “Migrations_MigrationProvider” as the first line (that example is the actual class name of my migration tool provider)
- assure that your class can be loaded, setting ZEND_TOOL_INCLUDE_PATH_PREPEND accordingly
On the same topic you can also read this issue.
As a bonus track, below is a little bash script I use to run my migration tool.
#!/bin/bash
APPPATH=$(readlink -f ..)/app
export ZF_CONFIG_FILE=${APPPATH}/../zf.ini
if [ ! -f ${ZF_CONFIG_FILE} ]; then
echo "Non trovo zf.ini"
echo "Forse non stai eseguendo questo programma dalla directory DB?"
exit -1
fi
if [[ "${ZF_BIN_DIR}" == "" ]]; then
ZF_BIN_DIR=$(readlink -f ../vendor/Zend)/../../bin
ZF_BIN_DIR=$(readlink -f ${ZF_BIN_DIR})
fi
if [ ! -f ${ZF_BIN_DIR}/zf.sh ]; then
echo "Non trovo zf.sh in " ${ZF_BIN_DIR}
echo "Forse non stai eseguendo questo programma dalla directory DB?"
exit -1
fi
MIGCLASSDIR=$(readlink -f ../vendor/Renomo/library)
if [ ! -d ${MIGCLASSDIR} ]; then
echo "Impossibile trovare la directory della classe Migration"
exit -1
fi
MIGDIR=$(readlink -f migrations)
if [ ! -d ${MIGDIR} ]; then
echo "Impossibile trovare la directory delle migration"
exit -1
fi
export ZEND_TOOL_INCLUDE_PATH_PREPEND=${MIGCLASSDIR}
${ZF_BIN_DIR}/zf.sh run migration ${1}
RSS







