Phing:无效数据库连接详细信息后重新启动

时间:2015-01-19 09:03:08

标签: phing

我正在编写一个需要使用用户提供的详细信息连接到数据库的Phing任务。

我能够提示用户输入主机/用户/密码/数据库,并使用 PDOSQLExecTask 测试详细信息。

我不知道该怎么办重新提示用户重新提供详细信息(如果发现它们无效),并继续重新提示,直到他们做对了。

下面的块是我的尝试,但它是错误的,因为当任务调用自己时,Phing不喜欢。

<target name="prompt-and-test-database-connection">
    <trycatch>
        <try>
            <input propertyName="db.host" message="Database host" promptChar=":" />
            <input propertyName="db.user" message="Database user" promptChar=":" />
            <input propertyName="db.pass" message="Database password" promptChar=":" />
            <input propertyName="db.name" message="Database name" promptChar=":" />
            <echo message="Testing connection..." />
            <pdosqlexec url="mysql:host=${db.host};dbname=${db.name}" userid="${db.user}" password="${db.pass}" onerror="continue">
                USE `${db.name}`;
            </pdosqlexec>
        </try>
        <catch>
            <echo level="error">Invalid database connection details.  Please try again.</echo>
            <phingcall target="prompt-and-test-database-connection" />
        </catch>
    </trycatch>
</target>

1 个答案:

答案 0 :(得分:0)

您可以使用<retry>任务。由于<retry>只接受一个嵌套任务,因此我在另一个任务中提取了连接。以下适用于我:

<target name="try-connection">
    <retry retryCount="3">
        <phingcall target="connection"/>
    </retry>
</target>

<target name="connection">
    <input propertyName="db.host" message="Database host" promptChar=":"/>
    <input propertyName="db.user" message="Database user" promptChar=":"/>
    <input propertyName="db.pass" message="Database password" promptChar=":"/>
    <input propertyName="db.name" message="Database name" promptChar=":"/>
    <echo message="Testing connection..."/>
    <pdosqlexec url="mysql:host=${db.host};dbname=${db.name}"
                userid="${db.user}"
                password="${db.pass}"
                onerror="continue">
        USE `${db.name}`;
    </pdosqlexec>
</target>