2015-01-19 6 views
1

Я пишу задачу Phing, которая должна быть подключена к базе данных, используя данные, предоставленные пользователем.Phing: Reprompt после недействительных данных о подключении к базе данных

Я могу запросить пользователя для базы данных хоста/пользователя/пароля/базы данных и проверить детали, используя 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> 

ответ

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> 

 Смежные вопросы

  • Нет связанных вопросов^_^