LARAVLE 4 : 컨트롤러에서 AJAX 요청에 응답합니다
문제
Request :: Ajax () 메서드를 사용하여 내 컨트롤러에서 Ajax 특정 응답을 생성하려고합니다.유일한 문제는 지금 내가 설정 한 방식이 정말로 멋진 솔루션이 아닙니다.
내 컨트롤러 :
class HomeController extends BaseController {
protected $layout = 'layouts/main';
public function __construct()
{
$this->beforeFilter('auth');
}
public function getIndex()
{
$view = View::make('content.home.index');
if(Request::ajax()) return $view; //For ajax calls we only want to return the content to be placed inside our container, without the layout
$this->layout->menu = 'content.menu';
$this->layout->content = $view;
}
}
.
바로 지금, 내 컨트롤러 내에서 정의한 모든 방법에 대해 Ajax 요청을 검사하는 코드 스 니펫을 추가하고 명령문이 true를 반환하면 단일보기를 반환해야합니다.
이것은 아마도 프레임 워크보다 더 많은 PHP와 관련된 PHP가 더 많이 발생합니다.
은 실제로 메소드 내부에 놓지 않고 모든 메소드 호출에서 Ajax 검사를 실행하는 방법이 있습니까?아니면 내 코드를 건조하게 유지하는 다른 해결책이 있습니까?
미리 감사드립니다!
Ps : 이것은 StackOverflow에 대한 첫 번째 게시물이므로 실수를 한 경우 나에게 자유롭게 해결하십시오
해결책
'layouts / ajax'(또는 원하는 이름)라는 새 베어 폰 레이아웃을 만듭니다.
<?php echo $content ?>
.
기본 컨트롤러 에서이 setupLayout()
기능을 무시하십시오.
protected function setupLayout()
{
if ( ! is_null($this->layout))
{
$layout = Request::ajax() ? 'layouts/ajax' : $this->layout;
$this->layout = View::make($layout);
}
}
.
getIndex()
기능을이 옵션으로 변경하십시오.
public function getIndex()
{
$view = View::make('content.home.index');
$this->layout->menu = 'content.menu';
$this->layout->content = $view;
}
.
이제는 Ajax 요청이 layout
로 설정된 Ajax 요청을받을 수 있듯이 Ajax 요청을 사용하여 AJAX 요청이 비 AJAX 요청이 렌더링됩니다.
참고 : 호출 된 메소드가 진실 값을 반환하면 $this->layout->content
의 레이아웃 설정을 방치합니다.따라서이 방법은 아래와 같은 기능에 대해 작동하지 않습니다.
public function getIndex()
{
return View::make('content.home.index');
}
. 다른 팁
AJAX 요청이있는 경우 생성자에서 레이아웃 속성을 변경할 수 있습니다.
public function __construct()
{
$this->beforeFilter('auth');
if(Request::ajax()) {
$this->layout = '';
}
}
.
작동하지 않으면 대신 null로 설정하십시오.
Ajax를 통해 왜보기를 반환하겠습니까?스파를 만들기 위해 그것을 사용하고 있습니까?그렇다면 더 나은 방법이 있습니다.일반적으로 AJAX를 통해 HTML을 반환하는 것입니다.
당신의 위치에 갈 경로는 아마 당신이 어떻게하는지와 반대 일 것입니다.렌더링 렌더링 렌더링에 관계없이 요청이 ajax이면 추가 데이터를 다시 전달하고 JS가 페이지에 데이터를 렌더링하도록합니다.그것은 근본적으로 대부분의 JavaScript MVC 프레임 워크 기능을 수행하는 방법입니다.
죄송합니다. 여기에 요점을 완전히 누락하면 제공 한 정보로 최종 목표를 가정합니다.