compact 함수로는 class variables로는 처리 불가능합니다.
with 메서드를 이용해보세요.
public function __construct() { $this->a = "test"; } public function test() { return view('test')->with('a', $this->a); }
PHP는 기본적으로 함수에 해당해서 scope (변수 유효범위)를 가지고 있습니다.
질문으로 주신 예문의 경우 생성자 함수안에서 변수 $를 선언하셨기 때문에
create 함수에서는 변수 $a가 존재하지 않게됩니다.
자세한 내용은 요기 매뉴얼 읽어보세요. 언어를 배울때 항상 변수 scope는 읽어보시는게 좋아요.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UsersController extends Controller
{
private $a;
public function __construct()
{
$this->a = "안녕";
}
public function create()
{
$a = $this->a;
return view('users.create' , compact('a'));
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UsersController extends Controller
{
private $a;
public function __construct()
{
$this->a = "안녕";
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UsersController extends Controller
{
private $a;
public function __construct()
{
$this->a = "안녕";
}
public function create()
{
return view('users.create' , compact('a'));
}
}
이런식으로 코딩하고 users.create 파일에
{{ $a }} 이렇게 코딩했는데
Undefined variable: a 오류가 나오네요 ㅠㅠ compact가 잘못됬을까요 ㅠㅠ ?
라라벨로 배우는 실전 php 웹 프로그래밍 서적으로 라라벨 공부중인데
__construct 가 나와서 예제 보면서 공부하는중인데 제가 이해한 내용이 맞을까요 ?
라우트에 userscontroller@create 을 정의해놓고 해당 url로 접속을 하면 라라벨이 내부적으로 인스턴트를 만들고
해당 메소드의 코드를 실행하는데 construct 가 정의되있고 이거는 생성자로써 userscontroller 라는 클래스가 인스턴트로 만들어질때 무조건 실행 된다고 이해했습니다
그럼
기존에 데이터를 불러올떄 각 메소드안에서 이렇게 데이터를 불러오고
$navitem = nav::where('type','largeclass')->get();
compact 함수를 이용해서 뷰와 같이 데이터를 전송했는데 불편한점이
각각메소드에 똑같은 코드가 들어가기 때문에 중복이 발생하고 이것을 해결하려고
아래와같이
construct 메소드안에 필요한 데이터코드를 넣고 각 메소드에 뷰를 호출할때
compact 함수로 데이터를 넘기려고 아래와 같이 코딩을 하고 테스트를 하려고
users.create 뷰에 {{ $a }}를 코딩하고 테스트를 해봤지만
정의되지 않은 함수라고 나오는데 이렇게는 사용할수없을까요 ?
초보적인 질문 죄송합니다 ㅠㅠ 도움좀 주실수있을까요 ?
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UsersController extends Controller
{
public function __construct()
{
$a = "안녕";
}
public function create()
{
return view('users.create' , compact('a'));
}
}