질문을 삭제하지 말아주세요.!
 
1
0
-1


라라벨로 배우는 실전 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'));
}
}

    CommentAdd your comment...

    3 answers

    1.  
      1
      0
      -1

      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는 읽어보시는게 좋아요.

        CommentAdd your comment...
      1.  
        1
        0
        -1

        <?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'));
        }
        }

          CommentAdd your comment...
        1.  
          1
          0
          -1

          <?php

          namespace App\Http\Controllers;

          use Illuminate\Http\Request;

          class UsersController extends Controller
          {

          private $a;
          public function __construct()
          {
          $this->a = "안녕";
          }

          1. getahead92

            <?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가 잘못됬을까요 ㅠㅠ ?

          CommentAdd your comment...