Как исправить ошибку foreach в xml laravel 5.7 - PullRequest
0 голосов
/ 15 марта 2019

Я хочу создать XML-данные в laravel 5.7, и я протестировал их с помощью почтальона. Для данных я использую JSON.

Это мои данные в json:

[
    {"fa_type_cd":"string","name":"Sting","user_value":"Sting","sort_seq":"1","type_cd":"string"},
    {"fa_type_cd":"string","name":"String","user_value":"String","sort_seq":"1","type_cd":"String"}
]

и это моя функция в контроллере для создания xml:

public function createXml(Request $request){
    $data = $request->input('data');
    $decode_data = json_decode($data);

    $xmlrequest = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c1c="http://splwg.com/C1CustomerContactMaintenance.xsd">
       <SOAP-ENV:Header xmlns:wsse="http://www.w3.org/2001/XMLSchema-instance">
        <wsse:Security>
            <wsse:UsernameToken>       
                <wsse:Username>Username</wsse:Username>
                <wsse:Password Type="PasswordText">Password</wsse:Password>        
            </wsse:UsernameToken>    
        </wsse:Security>  
       </SOAP-ENV:Header>
        <SOAP-ENV:Body>
            <C1FieldActivityMaintenance dateTimeTagFormat="CdxDateTime"  transactionType ="UPDATE" >
                <C1FieldActivityMaintenanceService>
                    <C1FieldActivityMaintenanceHeader
                        FieldActivityID="111" 

                    /><C1FieldActivityMaintenanceDetails 
                        FieldActivityID="111" 
                        ActivityType="DE"  
                        > 
                        <FASteps>
                            <FAStepsHeader
                                FieldActivityID="111" 
                                />

                        </FASteps>
                        <FACharacteristics>
                            <FACharacteristicsHeader
                                FieldActivityID="111" 
                                />
                            '
                                foreach ($decode_data as $key => $value) {
                                    '<FACharacteristicsRow
                                        rowAction="Change" 
                                        FieldActivityID="111" 
                                        CharacteristicType="'.$value->type_cd.'" 
                                        Sequence="'.$value->sort_seq.'"
                                        SearchCharacteristicValue="'.$value->user_value.'" 
                                        CharacteristicValue="'.$value->user_value.'">
                                    </FACharacteristicsRow>'
                                } 
                            '
                        </FACharacteristics>
                        <FaRem>
                            <FaRemHeader
                                FieldActivityID="111" 
                                />

                        </FaRem>
                        <FaLog>
                            <FaLogHeader
                                FieldActivityID="111" 
                                />
                            <FaLogRow
                                rowAction="Add" 
                                FieldActivityID="111" 
                                Sequence="2"
                                DateTime="2018-10-06 02:50:00" 
                                Details="" 
                                User="Users2" 
                                LogType="MSG" 
                                >
                            </FaLogRow>
                        </FaLog>
                    </C1FieldActivityMaintenanceDetails>
                </C1FieldActivityMaintenanceService>
            </C1FieldActivityMaintenance>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>';

    print_r($xmlrequest);
}

Я хочу получить доступ к данным json после декодирования в xml, но когда я запускаю их в почтальоне, я получаю сообщение об ошибке:

Symfony\Component\Debug\Exception\FatalThrowableError: syntax error, unexpected &#039;foreach&#039; (T_FOREACH)

Как исправить эту ошибку?

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Простой ответ

Нельзя использовать foreach между одинарными кавычками. Сначала вы должны создать переменную, а затем сослаться на нее в xml.

$foreachResult = "";

foreach ($decode_data as $key => $value) {
    $foreachResult += <--your xml code-->;
}

тогда

<FACharacteristicsHeader
   FieldActivityID="111"/>' . $foreachResult . '/>

Предпочтительный способ:

Действительно трудно увидеть и понять xml-коды в php-файлах. Вы можете использовать веточку для рендеринга XML в Laravel.

Пример: Рендеринг xml с веткой в ​​laravel (посмотрите лучший ответ)

1 голос
/ 15 марта 2019

Вы не можете просто использовать foreach() в середине строки.Если вы хотите правильно сделать это, сделайте что-то вроде этого:

public function createXml(Request $request){
    $data = $request->input('data');
    $decode_data = json_decode($data);

    $xmlrequest = '
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c1c="http://splwg.com/C1CustomerContactMaintenance.xsd">
       <SOAP-ENV:Header xmlns:wsse="http://www.w3.org/2001/XMLSchema-instance">
        <wsse:Security>
            <wsse:UsernameToken>       
                <wsse:Username>Username</wsse:Username>
                <wsse:Password Type="PasswordText">Password</wsse:Password>        
            </wsse:UsernameToken>    
        </wsse:Security>  
       </SOAP-ENV:Header>
        <SOAP-ENV:Body>
            <C1FieldActivityMaintenance dateTimeTagFormat="CdxDateTime"  transactionType ="UPDATE" >
                <C1FieldActivityMaintenanceService>
                    <C1FieldActivityMaintenanceHeader
                        FieldActivityID="111" 

                    /><C1FieldActivityMaintenanceDetails 
                        FieldActivityID="111" 
                        ActivityType="DE"  
                        > 
                        <FASteps>
                            <FAStepsHeader
                                FieldActivityID="111" 
                                />

                        </FASteps>
                        <FACharacteristics>
                            <FACharacteristicsHeader
                                FieldActivityID="111" 
                                />
    ';

    foreach ($decode_data as $key => $value) {
        $xmlrequest .='<FACharacteristicsRow
            rowAction="Change" 
            FieldActivityID="111" 
            CharacteristicType="'.$value->type_cd.'" 
            Sequence="'.$value->sort_seq.'"
            SearchCharacteristicValue="'.$value->user_value.'" 
            CharacteristicValue="'.$value->user_value.'">
        </FACharacteristicsRow>'
    } 

    $xmlrequest .= '
                        </FACharacteristics>
                        <FaRem>
                            <FaRemHeader
                                FieldActivityID="111" 
                                />

                        </FaRem>
                        <FaLog>
                            <FaLogHeader
                                FieldActivityID="111" 
                                />
                            <FaLogRow
                                rowAction="Add" 
                                FieldActivityID="111" 
                                Sequence="2"
                                DateTime="2018-10-06 02:50:00" 
                                Details="" 
                                User="Users2" 
                                LogType="MSG" 
                                >
                            </FaLogRow>
                        </FaLog>
                    </C1FieldActivityMaintenanceDetails>
                </C1FieldActivityMaintenanceService>
            </C1FieldActivityMaintenance>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    ';

    print_r($xmlrequest);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...