2013-05-01 4 views
4

저는 Laravel을 배우기 시작했고 여전히 학습 곡선에 서 있습니다. 이제 Laravel 3부터 시작하겠습니다 만, 일단 프로젝트가 작동하면 Laravel 4로 프로젝트를 전환 할 것입니다. 이제 체크 상자 배열의 유효성을 검사하는 방법에 대해 질문합니다. 그룹 내의 1 개 이상이 활성화 (선택)되어 있는지 확인하고 싶습니다. Laravel 포럼에서 어딘가에 필수 항목을 사용하여 유효성을 검사했다고 읽었지만 dd(input::all()) 입력란과 체크 상자가 표시되지 않습니다.Laravel 3 - 체크 박스 배열의 유효성을 검사하는 방법을 적어도 1 개 확인 했습니까?

일부 내 블레이드 생성 코드

<label class="checkbox">{{ Form::checkbox('changeReasons[]', 'ckbCRCertification', Input::had('ckbCRCertification'), array('id' => 'ckbCRCertification')) }} Certification</label> 
<label class="checkbox">{{ Form::checkbox('changeReasons[]', 'ckbCRDesignCorrection', Input::had('ckbCRDesignCorrection'), array('id' => 'ckbCRDesignCorrection')) }} Design Correction</label> 

내 컨트롤러 (REST) ​​코드는 다음과 같습니다 : 체크 박스에 대한

public function post_create() 
{ 
    print "Inside the post_create()"; 
    // validate input 
    $rules = array(
     'ecoNo'    => 'min:4', 
     'productAffected' => 'required', 
     'changeReasons'  => 'required' 
    ); 

    $validation = Validator::make(Input::all(), $rules); 

    if($validation->fails()) 
    { 
     return Redirect::back()->with_input()->with_errors($validation); 
    } 

    $eco = new Eco; 

    $eco->ecoNo = Input::get('ecoNo'); 
    $eco->productAffected = Input::get('productAffected'); 

    $eco->save(); 

    return Redirect::to('ecos'); 
} 

나는 또한 검증이 실패 후 체크 박스 상태를 얻기를위한 올바른 코드를 알고 싶어, 나는 내가 Input::had(checkBoxName)을 보았다고 생각 어딘가에 있지만 그렇지 않습니다. 작동하는 것처럼 보입니다. 아마도 올바르게 사용하지 않을 것이고 모든 예제가 입력과 그 밖의 것에 대한 것이기 때문에 약간 혼란스러워 할 것입니다. L4에서 유효성 검사가 거의 같다고 가정합니다.

답변

3

다시이 프로젝트에 가서 좀 더 연구하기를, 나는이 문제에 대한 최선의 방법은 다음과 같다 발견했다.

내 블레이드보기

:

<div class="control-group row-fluid"> 
    <?php $arrChangeReasons = Input::old('changeReasons', array()); // array of enable checkboxes in previous request ?> 

    <label class="checkbox">{{ Form::checkbox('changeReasons[]', 'certification', in_array('certification', $arrChangeReasons)) }} Certification</label> 
    <label class="checkbox">{{ Form::checkbox('changeReasons[]', 'designCorrection', in_array('designCorrection', $arrChangeReasons)) }} Design Correction</label> 
</div> 

블레이드보기의 설명은 발생 유효성 검사 후 2 단계 과정, 입니다이며, 다음

  1. 는에 (체크 박스 배열을 당겨 내 경우 'changeReasons []') Input::old
  2. 그 배열에서 우리는 개별 체크 박스를 검색하고 거기에 있는지 확인한 다음 체크를 변경합니다 상자를 checked 상태로 만듭니다. 이것이 in_array() 함수의 작업입니다. true/false를 반환하면 체크 상자의 상태가 변경됩니다.

내 컨트롤러 (REST) ​​코드는 처음에 내 질문에 작성된 것과 똑같습니다. 자세한 내용을 보려면 $rules = array('changeReasons' => 'required');을 정의하여 적어도 하나의 확인란이 checked인지 확인해야합니다.

0

체크 박스에는 다음과 같은 값이 필요합니다. 체크 상자에 체크 표시가되어있는 경우 Input :: get ('foo')는 1을 반환하지만 선택하지 않으면 포스트 배열에 없기 때문에 아무 것도 반환하지 않습니다.

나는이 코드를 사용하고 있습니다 :

if(Input::get('foo')){ 
    $bar->is_foo = 1; 
} 
else{ 
    $bar->is_foo = 0; 
} 
+1

또는'Input :: get ('foo', 0); –

+2

과 같은 기본 폴백을 사용할 수 있습니다. 그렇지만 어떻게하면 내 'Validator' 체크에 이것을 사용하고'return redirect : : back() -> with_input() -> with_errors ($ validation);'가능하면 입력과 동시에 반환 할 수없는 여분이 아니라 내 유효성 검사의 일부가되기를 원합니다. – ghiscoding

+0

왜 이런 방식으로 사용하는지 이해하기 시작했습니다. 이제 작성한 코드는 하나의 체크 박스 이름으로 작동하지만, 제 경우에는 배열 배열을 사용합니다. 그래서 체크 박스의 코드를 한 번만 살면 어떻게 되나요? 나는'Input :: get ('changeReasons [ckbCRCertification]', 0)'과 같은 것을 시도했지만'get'은 단일 키에서만 작동하고 배열에서는 작동하지 않기 때문에 작동하지 않습니다.그러면 내 체크 박스가 활성화되었는지 여부를 어떻게 알 수 있습니까? – ghiscoding