2011-07-22 8 views
2

私はphingcallコマンドでターゲットを呼び出しています。 呼び出されたターゲットからステータス変数を返すか、少なくとも呼び出し元のターゲットから既存の値を変更したいとします。 目標:サブターゲットが失敗してプロパティで示された場合は、メインターゲットコントロールロジックに分岐します。 以下のコードは機能しません。どのようにそれを働かせるか、または私の目標のための別のアプローチをどのようなアイデア?内部的にphing/phingcallでターゲットを呼び出すときの戻り値

おかげで、 ユルゲン

<target name="main"> 
    <echo>target a</echo> 
    <echo>${bOk}</echo> 
    <exec command="echo 1" outputProperty="bOk" /> 
    <echo>bOk is 1: ${bOk}</echo> 
    <phingcall inheritRefs="true" target="sub"> 
    </phingcall> 
    <echo>bOk should now be 0: ${bOk}</echo> 
</target> 

<target name="sub"> 
    <echo>target b</echo> 
    <echo>bOk is 1: ${bOk}</echo> 
    <exec command="echo 0" outputProperty="bOk" /> 
    <echo>bOk now is 0: ${bOk}</echo> 
</target> 

ここでの問題は

<echo>bOk should now be 0: ${bOk}</echo> 

エコー

bOk should now be 0: 1 

答えて

3

がさえIRCを#phingの大きな助けと私は解決することができなかったということです問題。 私は、ターゲットの間を通過するデータを考慮するために、カスタムタスクを書くことにしました:これは私の問題のために正常に動作します

<?php 

require_once "phing/Task.php"; 

class rvGlobalTask extends Task { 

    private static $bOk = 1; 
    private $sMode = null; 
    private $bValue = null; 
    private $outputProperty = null; 

    public function setSMode($sMode) { 
     $this->sMode = $sMode; 
    } 
    public function setBValue($bValue) { 
     $this->bValue = $bValue; 
    } 
    public function setOutputProperty($outputProperty) { 
     $this->outputProperty = $outputProperty; 
    } 

    public function main() { 
     if ($this->sMode == "set") { 
      rvGlobalTask::$bOk = $this->bValue; 
     } else { 
      $this->project->setProperty(
       $this->outputProperty, 
       rvGlobalTask::$bOk 
      ); 
     } 
    } 
} 
?> 

。多分誰かがこれも有用であると考えます。

+0

、ここセッターです: ''とゲッター: ' ' –

2

ExecTaskを使用して出力をキャプチャする方法は次のとおりです。明確にするために

<?xml version="1.0" encoding="UTF-8"?> 
<project name="example" default="check-composer"> 

    <!-- set a property to contain the output --> 
    <property name="whichComposer" value="" /> 

    <!-- check if composer (getcomposer.org) is installed globally --> 
    <target name="check-composer"> 
     <!-- put the output of "which" in our property --> 
     <exec command="which composer" outputProperty="whichComposer" /> 

     <!-- act on what we found out --> 
     <if> 
      <contains string="${whichComposer}" substring="composer" /> 
      <then> 
       <echo>Composer installed at ${whichComposer}</echo> 
      </then> 
      <else> 
       <echo message="better install composer. ${whichComposer}"/> 
      </else> 
     </if> 
    </target> 

</project> 
関連する問題