Phing:无效的数据库连接详细信息后重新提示
Phing: Reprompt after invalid database connection details
我正在编写一个 Phing 任务,需要使用用户提供的详细信息连接到数据库。
我能够提示用户输入 host/user/password/database 并使用 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>
您可以使用 <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>
我正在编写一个 Phing 任务,需要使用用户提供的详细信息连接到数据库。
我能够提示用户输入 host/user/password/database 并使用 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>
您可以使用 <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>