메뉴 건너뛰기

기본 Blade를 찾아가는 루틴...

일단 마이페이지 스킨을 만들려고 \App\Skins\User\SettingsSkin 을 상속받았었습니다. 그 때, 자동 생성된 코드에서 

View [helloworld.src.Skins.HelloSettings.edit] not found.

라는 오류를 발생시킵니다. (기본 생성된 코드에서)

그래서, 자동생성된 코드인,

protected static $path = 'helloworld/src/Skins/HelloSettings';

이 코드를 주석처리하면 기본 설정 스킨이 잘 출력됩니다. 그러나, 여기서 발생되는 문제. views/edit.blade.php를 만들어도 얘를 렌더링하지 않습니다.

그래서 GenericSkin을 상속받아 구현하면, 전체가 잘 변합니다. 그러나, 저 edit.blade.php 파일이 없는 경우엔 

    /**
     * 스킨을 출력한다.
     * 만약 view 이름과 동일한 메소드명이 존재하면 그 메소드를 호출한다.
     *
     * @return Renderable|string
     */
    public function render()
    {
        $view = $this->view;
        $method = ucwords(str_replace(['-', '_', '.'], ' ', $view));
        $method = lcfirst(str_replace(' ', '', $method));

        // for php7
        if ($method === 'list') {
            $method = 'listView';
        }

        if (method_exists($this, $method)) {
            return $this->$method($view);
        }

        if (View::exists(self::view($view)) === false &&
            (static::$defaultSkin && static::class !== get_class(static::$defaultSkin))
        ) {
            return static::$defaultSkin->setView($view)->render();
        }

        return $this->renderBlade($view);
    }

 

GenericSkin.php에 선언된 대로 기본 스킨을 찾아갑니다. 여기서 발생하는 문제,

Undefined variable: fieldTypes (View: /j94k/var/www/resources/views/user/skins/default/settings/edit.blade.php) (View: /j94k/var/www/resources/views/user/skins/default/settings/edit.blade.php)

아주 잘 찾아갔어요. 그러나 fieldTypes 변수를 찾을 수 없다는 Exception이 발생됩니다.

    /**
     * Show the view for setting.
     *
     * @param string $view view name
     * @return \Illuminate\View\View
     */
    public function edit($view)
    {
        $useEmailConfirm = app('xe.config')->getVal('user.common.guard_forced') === true;

        app('xe.frontend')->html('user.settings.loadScript')->content(
            "<script>
            $(function () {
                $('.__xe_setting.__xe_settingDisplayName').xeDisplayNameSetting({
                    checkUrl: '".route('user.settings.name.check')."',
                    saveUrl: '".route('user.settings.name.update')."'
                });
                $('.__xe_setting.__xe_settingPassword').xePasswordSetting({
                    checkUrl: '".route('user.settings.password.check')."',
                    saveUrl: '".route('user.settings.password.update')."'
                });
                $('.__xe_setting.__xe_settingEmail').xeEmailSetting({
                    addUrl: '".route('user.settings.mail.add')."',
                    saveUrl: '".route('user.settings.mail.update')."',
                    deleteUrl: '".route('user.settings.mail.delete')."',
                    confirmUrl: '".route('user.settings.mail.confirm')."',
                    deletePendingUrl: '".route('user.settings.pending_mail.delete')."',
                    resendPendingUrl: '".route('user.settings.pending_mail.resend')."',
                    useEmailConfirm: ".($useEmailConfirm ? 'true' : 'false')."
                });
                $('.__xe_setting.__xe_settingLeave').xeLeaveSetting({
                    saveUrl: '".route('user.settings.leave')."'
                });
            });
            </script>"
        )->appendTo('body')->load();

        return $this->renderBlade($view);
    }

 

여기서 발생되는 문제:

1. GenericSkin 클래스를 상속받았을 때, edit()을 구현하지 않으면,
    views/edit.blade.php파일이 반드시 존재해야 한다.

2. SettingsSkin 클래스를 상속받았을 때 $path라는 스테이틱 변수가 선언되지 않아야 하나,
   이럴경우 기본 스킨의 뷰만 출력된다.

3. 결국 기본 스킨 파일을 복사해 와서 1번 방법대로 edit.blade.php 파일을 만들고,
   커스텀 코드를 작성 해야 한다.

4. 3번 방법대로 작업한 경우, 각 개인정보를 변경하는 기능도 개별 스킨에서 구현해야 한다.

5. SettingsSkin 클래스를 상속받아서 $path를 강제로 변경하면 정상동작을 하지 않는다.
    --> View [helloworld.src.Skins.HelloSettings.edit] not found.

 

 

혹시 다른 방법이 있을까요?

 

FINAL

또 자답이네요...

자동 생성된 코드

protected static $path = 'helloworld/src/Skins/HelloSettings';

이거를

protected static $path = 'helloworld/src/Skins/HelloSettings/views';

로 바꾸고 SettingsSkin을 상속받으면 기본 구현 + 커스텀 스킨을 적용할 수가 있었습니다.
다만 기본 스킨을 구성하는 blade 파일 전체를 복사해와야 합니다.
--> 복사해오지 않는 경우 아래와 같은 예외가 발생합니다.

Undefined variable: fieldTypes (View: /j94k/var/www/resources/views/user/skins/default/settings/edit.blade.php) (View: /j94k/var/www/resources/views/user/skins/default/settings/edit.blade.php)

 

  • share