문제

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 프레임 워크 기능을 수행하는 방법입니다.

죄송합니다. 여기에 요점을 완전히 누락하면 제공 한 정보로 최종 목표를 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top