2013-11-28 4 views
0

저는 Laravel을 처음 접했고 나는 무엇보다 논리와 더 관련이 있다고 생각하는 오류를 얻었습니다. 그러나 나는 극복하는 방법을 이해할 수없는 것 같습니다. 그것. 그래서 데이터베이스에있는 특정 문자열을 검색 할 수있는 간단한 양식의 페이지가 있습니다. 하지만 결과를 같은 페이지에 표시하고 싶습니다.Laravel 4 : 같은 페이지에서 변수를 얻으려고 시도합니다.

이 내 Route.php입니다 : 여기

는 지금까지이 무엇

public function index() 
{ 
    return View::make('index'); 
} 

public function search() 
{ 
    return View::make('index'); 
} 

public function find() 
{ 
    $match = Input::get('find'); 
    if($match) { 
     $results = Book::where('title', 'like', '%'.$match.'%') 
         ->orWhere('author', 'like', '%'.$match.'%') 
         ->get(); 
     return View::make('index', array('results', $results)); 
    } else { 
     return Redirect::to('/')->with('flash_error', 'No string added!'); 
    } 
} 

그리고 내보기 (index.blade.php :

Route::get('/', '[email protected]'); 
Route::post('find', '[email protected]'); 

이 내 HomeController입니다) :

{{ Form::open(array('url' => 'find', 'method' => 'POST')) }} 
    {{ Form::text('find', '', array('class' => 'search-query', 'placeholder' => 'Search')) }} 
    {{ Form::submit('Submit', array('class' => 'btn btn-info')) }} 
    {{ Form::close() }} 
    @if (Session::has('flash_error')) 
      {{ Session::get('flash_error') }} 
    @endif 
@foreach ($results as $result) 
     {{$result->title}} 
@endforeach 

각 foreach는 각 결과를 표시하는 일부 아약스로드로 대체됩니다.)

오류는 "정의되지 않은 변수 : 결과"라고 표시되며 foreach를 표시합니다. 나는이 페이지로가는 첫 번째 패스에서 아직 결과가로드되지 않았지만이 오류를 극복 할 수있는 이유는 무엇입니까? 데이터를 표시하기 위해 다른 페이지로 이동하지 않고 동일한 페이지에 데이터를 표시하려고합니다. 내가 말했듯이 이것은 대부분 논리와 관련이 있다고 생각합니다. (Laravel을 처음 접했을 때도 그렇습니다)

도움이 될만한 정보가 있습니까?

+0

SO로 복사 할 때 오타가되었지만'HomeController'의'find()'메쏘드에서'orwhere()'메소드가 쿼리 빌더에 존재하지 않는지 확실치 않습니다. 'orWhere()'는 그렇습니다. –

+0

또한 궁금한 점은'gen_index()'의 목적은 무엇인가? 왜'View :: make()'를'find()'로 옮기지 않겠습니까? –

+0

orWhere()가 오타 였지만 gen_index가 실제로 아무 것도하지 않는 것은 맞습니다! 왜 내가 그런 식으로 수출하는 것이 자연 스럽던 지 모르겠다.결과적으로 내 질문이 업데이트되었습니다. 내 초기 문제에 대한 어떤 생각? – user3011462

답변

0

여기서 문제는 여러 컨트롤러에서 index.blade.php의 사용, 당신은 컨트롤러가 제공하는 잊었 인 변수 (등 결과, 어떤 변수는 생략 될 수 있음).

당신이 / ([email protected]를) 요청

, index.blade.php이 렌더링되어 있지만 $results 뷰에 전달되지 않기 때문에, 당신은 정의되지 않은 변수의 경고를 참조하십시오. $results을 정의했기 때문에 [email protected]에서 문제가되지 않습니다. 이 문제를 해결하려면 행을 따라 무언가를 수행해야합니다. foreach을 입력하기 전에 $results을 확인하십시오. 그래서 같이 :

@if(isset($results)) 
    @foreach ($results as $result) 
     {{$result->title}} 
    @endforeach 
@endif 

당신의 논리가 페이지의 레이아웃에 따라 달라질 수 있습니다 (당신은 다른 사람을 추가하고 일부 대체 자리 표시 내용을 표시 할 수 있습니다). index_gen()$resultsView::make()에 대한 호출을 추상화하여 코드의 DRY를 유지하지 않는 경우도


은 그때 View::make()에 호출 find()에서 교체 건의 할 것입니다.

+0

감사합니다. 정확하게 원했던 것입니다! – user3011462

1

당신은 메이크업 방법의 두 번째 PARAM으로 연관 배열을 전달해야

return View::make('index', array('results' => $results); 
+0

아쉽게도 제안 된 변경 사항이있는 경우에도 여전히 "정의되지 않은 변수 : 결과"가 표시됩니다. – user3011462

관련 문제