2014-06-23 3 views
1

여러 속성이있는 체크 박스 루프가 있습니다. 하나의 콘텐츠에는 많은 속성이있을 수 있으므로 사용자는 둘 이상의 속성을 확인할 수 있습니다.laravel 4 - 배열 된 체크 박스에 대해 오래된 입력

이 양식에서 일부 유효성 검사 오류가 발생하는 경우 이미 확인 된 속성을 미리 가져와야합니다.

@foreach($attributes as $entry) 



    <div class="check-line"> 

     <input type="checkbox" id="cat4" class='icheck-me' 
      name="attribute[<?php echo $entry->id; ?>]" 
      data-skin="square" 
      data-color="blue" 
      value="{{$entry->id}}" 
      <?php 
       if(Input::old('attribute['.$entry->id.']')== $entry->id) { 
        echo 'checked="checked"'; 
       } 
      ?> 
     /> 

     <label class='inline' for="cat4"> 
      <strong>{{$entry->name}}</strong> 
     </label> 

    </div> 
@endforeach 

위의 시도했지만 행운을 .. 어떤 아이디어?

Requests에 Laravel 워드 프로세서에서
+1

배열에서 검색 할 필요가있는 것처럼 보입니다. id, Input :: old ('attribute'))) echo 'checked'; ? >> 맞습니까? – alexrussell

답변

4

:

배열 "로 양식에 작업 할 때" "입력, 당신은 배열에 액세스 할 점 표기법을 사용할 수 있습니다 :"그래서 당신은 할 수 있어야

$input = Input::get('products.0.name'); 

을 뿐만 아니라이 FPR Input::old()는 :

은 다음과
<?php 
    if(Input::old('attribute.' . $ii) == $entry->id) { 
     echo 'checked="checked"'; 
    } 
?> 
+0

고마워요 .. 사람들이 요즘 stackoverflow에서 upvote 잊어 버렸습니다. 나는 당신이 이것에 대해 10 표를 얻을 것이기를 바란다 – sumit

+0

기꺼이 도와 드리겠습니다. 포인트도 가져 주셔서 감사합니다 :) – Unnawut

+0

기술적으로 이것은 내 의견만큼 정확하지 않다고 생각합니다. 체크 박스와 값이 항상 같은 순서로 있다고 가정합니다. 그들은 아마있을 것이다. 그러나 만약 당신이'$ 속성들 '이 주문되는 방식을 바꾸면 아마도 수표의 일부만이 기억되는 이상한 문제를 일으킬 것이다. – alexrussell

3

약간 더 포괄 대답은 바로 CURREN을 확인하기보다는 배열 검색을 수행하는 것 t 색인. 따라서, 나는 코드는 다음과 같이보고 참조 :

@foreach($attributes as $entry) 
    <div class="check-line"> 
     <input type="checkbox" id="cat4_{{{ $entry->id }}}" class="icheck-me" 
       name="attribute[]" 
       data-skin="square" 
       data-color="blue" 
       value="{{{ $entry->id }}}" 
       @if (in_array($entry->id, Input::old('attribute'))) 
        checked 
       @endif 
      /> 

     <label class="inline" for="cat4_{{{ $entry->id }}}"> 
      <strong>{{{ $entry->name }}}</strong> 
     </label> 
    </div> 
@endforeach 

을 그래서 첫째로 나는이 만든 코드를 더 블레이드 호환 :

  • 없음 에코는 지금 {{{}}} 오히려 이전의 혼합에 비해 <?php echo ___; ?>{{/}}의 (가 반향되는 HTML 사용 아니에요으로 나는 {{{보다는 {{에 갔다 그것은 안전 할 것이 좋습니다)
  • <?php if() { 지금 블레이드입니다

name 속성은 이제 단지 표준 배열 (이 필요하지 않기 때문에, 인덱스를 포함하지 않는다)이다, 그러나 id 속성은 이전에 모든 체크 박스에 동일한 ID를했다. 브라우저는 이것을 가능하게하지만 기술적으로 불법 HTML이므로 각 체크 박스에 항목 ID를 추가했습니다.

마지막으로 if 조건은 현재 색인이있는 입력 값이 현재 항목의 ID와 일치하는지 확인하지 않고 대신 현재 항목의 ID가 인 경우 검색하여 반환 된 배열에서인지 확인합니다. 이렇게하면 항목이 페이지의 이전 시간과 다른 순서로 반환 될 가능성을 방지 할 수 있습니다.

이제 우리는 $ ii 변수에 의존하지 않으므로 제거 될 수도 있습니다.


주의 사항은 :

이 일에서 나는 코드가 조금 더 좋은하지했지만, 코드는 더 이상 동일합니다. attribute 어레이에 키를 제공하기 위해 $ ii 변수를 사용하는 이유를 정확히 모른 채 코드를 올바르게 사용한다고 말할 수는 없습니다. 그러나이 오래된 입력 문제를 해결하는 데 도움이되었다고 가정하면 문제가되지 않습니다.

또한 {{에서 {{{으로 변경하면 결과가 나올 수 있습니다. 나는 $entry->id 물건을 괜찮다고 생각 했겠지만, 의 <label>은 이스케이프 처리되지 않은 HTML 일 필요가 있습니다. 이 변경 사항을 언제든지 다시 변경할 수 있습니다.

+0

{{{...}}}을 거의 사용하지 않는 이유를 알 수 있습니다. 필자는 저장된 순간에 데이터를 필터링/이스케이프하는 것을 선호합니다. 그리고 그것은 항상 저에게 그렇게 작용했습니다. 이스케이프 처리되지 않은 버전을 가져와야하는 경우 이스케이프 처리 된 콘텐츠와 이스케이프 처리되지 않은 콘텐츠를 나란히 저장합니다. 그렇지 않으면 콘텐츠가 신뢰할 수 있는지, 너무 탈출했는지/필터링했는지, 이미 필터링했는지 등을 파악하면 많은 두통을 겪게됩니다. – Unnawut

+1

아, 충분히 공정합니다. 필자는 탈출구를 가진 사람 이었지만, 이제는 다른 것들을 이스케이프 처리해야하기 때문에 다른 형태의 출력 (텍스트 전용 전자 메일, CSV 파일 등)을 작성하는 것은 정말 어색합니다. 그 두통에 대한 결과를 피하기 위해 이스케이프하지만 그때 당신은 "지금 * 내가 무엇을 다시 탈출합니까?" 두통. 게다가 그 에코를 3 중으로 세우는 것은 매우 쉽습니다. 그런 다음 가능한 공격에 열려 있습니다. – alexrussell

+0

(위의 수정 : 트리플 팔찌 것들을 잊어 버리는 것은 매우 쉽습니다!) – alexrussell

관련 문제