2017-02-06 3 views
1

Shopware를 배우는 중이며 해결 방법을 알 수없는 무언가가 있습니다.프론트 엔드 계정 프로필 양식의 고객 속성 업데이트

고객에게 속성을 추가하는 테스트 플러그인을 작성하고 있습니다. 나는 해당 필드를 등록 양식에 추가했고, 문서의 어딘가에서 읽은 것처럼 그 값을 자동으로 db에 저장합니다.

이제 암호 속성 필드 다음의 계정 프로필 페이지에서 속성을 편집 할 수있게하려고했습니다. 나는 그곳에 입력을 넣을 수 있었고 심지어 db의 값을 보여 주었다. 그러나 값을 변경하고 저장하면 그 값은 업데이트되지 않습니다. 필드 이름을 올바르게 가져 오는 문제인지 또는 다른 것을 무시해야하는지 여부는 알 수 없습니다. 아니면 그냥 불가능한가요? 이를 달성하는 방법에 대한 도움은 크게 감사하겠습니다.

아래

관련 코드 :

플러그인/personal_fieldset.tpl

{extends file="parent:frontend/register/personal_fieldset.tpl"} 

{block name='frontend_register_personal_fieldset_password_description'} 
{$smarty.block.parent} 

<div class="register--test-field"> 
    <input autocomplete="section-personal test-field" 
      name="register[personal][attribute][testField]" 
      type="text" 
      placeholder="Test Field" 
      id="testfield" 
      value="{$form_data.attribute.testField|escape}" 
      class="register--field{if $errorFlags.testField} has--error{/if}" 
      /> 
</div> 
{/block} 

계정 등록

public function install(InstallContext $context) 
{ 
    $service = $this->container->get('shopware_attribute.crud_service'); 
    $service->update('s_user_attributes', 'test_field', 'string'); 

    $metaDataCache = Shopware()->Models()->getConfiguration()->getMetadataCacheImpl(); 
    $metaDataCache->deleteAll(); 
    Shopware()->Models()->generateAttributeModels(['s_user_attributes']); 

    return true; 
} 

부트 스트랩/profile.tpl

{extends file="parent:frontend/account/profile.tpl"} 

{block name='frontend_account_profile_profile_required_info'} 
<div class="profile--test-field"> 
    <input autocomplete="section-personal test-field" 
      name="profile[attribute][testfield]" 
      type="text" 
      placeholder="Test Field" 
      id="testfield" 
      value="{$sUserData.additional.user.test_field|escape}" 
      class="profile--field{if $errorFlags.testField} has--error{/if}" 
    /> 
</div> 

{$smarty.block.parent} 
{/block} 

답변

2

가 있다고 양식 유형 사용 된 n 등록이 프로필에있는 것과 다릅니다. 당신이 \ Shopware \ 번들 \ AccountBundle \ 양식 \ 계정 \ PersonalFormType :: buildForm을 선택하면 , 당신은 속성이 양식에 포함되어 있으며이 지속된다는 것을 의미합니다 그

$builder->add('attribute', AttributeFormType::class, [ 
      'data_class' => CustomerAttribute::class 
     ]); 

을 볼 수 있습니다. 그래서 등록 양식에 값을 저장할 수 있습니다.

프로필에 \ Shopware \ Bundle \ AccountBundle \ Form \ Account \ ProfileUpdateFormType이 있습니다. 그리고이 속성은 폼 빌더에 추가되지 않습니다.

ProfileUpdateFormType을 확장하는 방법은 무엇입니까?

  1. Shopware_Form_Builder 속에서 부트 스트랩 (또는 특정 가입자 클래스)

    $ this-> subscribeEvent ('Shopware_Form_Builder', 'onFormBuild'); 방법을 만들기

  2. 는 로직 (\ Enlight_Event_EventArgs $ 이벤트) { 경우 ($ 이벤트 ->의 getReference()! == \ Shopware \ 번들 \ AccountBundle \ 양식 \ 계정

    공공 기능 onFormBuild을 추가 onFormBuild \ ProfileUpdateFormType :: class) { return; } $ builder = $ event-> getBuilder();

    $builder->add('attribute', AttributeFormType::class, [ 
         'data_class' => CustomerAttribute::class 
        ]); 
    } 
    
  3. 프로필 양식의 모든 속성을 사용할 수 있습니다이 방법으로

.

다른 가능성은 '속성'대신 '추가'속성을 사용하고 컨트롤러 이벤트를 구독하거나 사용자 지정 데이터를 처리하기 위해 컨트롤러 작업을 연결하는 것입니다.