首页 > 解决方案 > “调用未定义的函数 getOption()”

问题描述

我在新项目中使用旧 Laravel 项目的布局文件。但是当我放 layouts/app.php 代码时,出现了这个错误:

“调用未定义的函数 getOption()”

layouts/app.php 文件代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="wibdth=device-width, initial-scale=1">
    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">
    {!! getOption('home_page_meta') !!}

    <title>@yield('title')</title>
    <link rel="shortcut icon" href="{{ asset(getOption('logo')) }}">
    <link href="/css/vendor/bootstrap/css/bootstrap.min.css?v={{ config('constants.VERSION') }}" rel="stylesheet">
    <link href="/css/vendor/datatable/datatables.min.css?v={{ config('constants.VERSION') }}" rel="stylesheet">
    @if(in_array(getOption('language'),$rtlLang))
        <style>
            .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
                text-align:right; direction:rtl;
            }
        </style>
    @endif
    @if(getOption('panel_theme') == 'material')
        <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
        <link href="/css/flat-ui.min.css?v={{ config('constants.VERSION') }}" rel="stylesheet">
        <link href="/css/indusrabbit.css?v={{ config('constants.VERSION') }}" rel="stylesheet">
        <style>
            body {
                background-color: {{ getOption('background_color') }} !important;
            }

            .navbar-default {
                background-color: {{ getOption('theme_color') }};
            }

            .btn-primary,
            .btn-primary:hover,
            .btn-primary:active,
            .btn-primary:focus {
                background-color: {{ getOption('theme_color') }};
                border-color: #000;
            }

            .login-form .login-field:focus {
                border-color: {{ getOption('theme_color') }}; 

            }

            a,
            a:active,
            a:focus,
            a:hover {
                color: {{ getOption('theme_color') }};
            }

            .login-link:hover {
                color: {{ getOption('theme_color') }};
            }

            input[type=text]:focus,
            .form-control:focus {
                border-color: {{ getOption('theme_color') }};
            }

            .pagination li.active > a, .pagination li.active > span, .pagination li.active > a:hover, .pagination li.active > span:hover, .pagination li.active > a:focus, .pagination li.active > span:focus {
                background-color: {{ getOption('theme_color') }};
            }

            #footer-menu li a {
                color: {{ getOption('theme_color') }};
                font-size: 14px;
            }

            .pagination li > a:hover, .pagination li > span:hover {
                background-color: {{ getOption('theme_color') }};
            }

            .dropdown-lang li a{
                padding-top: 3px;
                padding-bottom: 3px;
            }

            .theme-bg{
                background-color: {{ getOption('theme_color') }} !important;
            }
        </style>
    @elseif(getOption('panel_theme') == 'simple')
        <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic" rel="stylesheet">
        <link href="/css/indusrabbit-theme-simple.css?v={{ config('constants.VERSION') }}" rel="stylesheet">
        <style>
            .theme-bg{
                background-color: #b9b6b6 !important;
            }
        </style>
    @elseif(getOption('panel_theme') == 'fancy')
        <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic" rel="stylesheet">
        <link href="/css/indusrabbit-theme-fancy.css?v={{ config('constants.VERSION') }}" rel="stylesheet">
    @endif
    <link href="/css/my-style.css?v={{ config('constants.VERSION') }}" rel="stylesheet">

<!-- Scripts -->
    <script>
        window.Laravel = <?php echo json_encode([
            'csrfToken' => csrf_token(),
        ]); ?>;
        window.baseUrl = "<?php echo url('/') ?>";
        var spinner = "<span class='loader'></span>";
    </script>
    <!-- jQuery (necessary for Flat UI's JavaScript plugins) -->
    <script src="/js/vendor/jquery.min.js?v={{ config('constants.VERSION') }}"></script>
    <script src="/js/vendor/form-validator/jquery.form-validator.min.js?v={{ config('constants.VERSION') }}"></script>
    <script type="text/javascript">
        $(function () {
            $.ajaxSetup({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                }
            });
            $.validate({
                modules: 'date',
                validateOnBlur: false,
                lang: '{{ getOption('language') }}'
            });

            $(document).on('click','.dropdown-lang a',function (e) {
                e.preventDefault();
                var locale = $(this).data('locale');
                $('#locale').val(locale);
                document.getElementById('lang-form').submit();
            });
        });
    </script>
    <script src="/js/my-script.js?v={{ config('constants.VERSION') }}"></script>
</head>
<body dir="{{ $dir }}">
<div id="app">
    <nav class="navbar navbar-default navbar-fixed-top">
        <div class="container-fluid" dir="rtl">
            <div class="navbar-header">

                <!-- Collapsed Hamburger -->
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse">
                    <span class="sr-only">Toggle Navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>

                <!-- Branding Image -->
            </div>

            <div class="collapse navbar-collapse" id="app-navbar-collapse">
                <!-- Right Side Of Navbar -->
                <ul class="nav navbar-nav navbar-right">
                    @if (Auth::check())
                        <li>
                            <a href="{{ url('/dashboard') }}">@lang('menus.dashboard')</a>
                        </li>
                        <li>
                            <a href="{{ url('/order/new') }}">@lang('menus.new_order')</a>
                        </li>

                        <!--- For disable mass-order page>
                        <li>
                            <a href="{{ url('/order/mass-order') }}">@lang('menus.mass_order')</a>
                        </li> --->

                        <li>
                            <a href="{{ url('/orders') }}">@lang('menus.order_history')</a>
                        <li>
                        @if(getOption('module_subscription_enabled') == 1)
                            <li><a href="{{ url('/subscriptions') }}">@lang('menus.subscriptions')</a></li>
                        @endif
                        <li><a href="{{ url('/services') }}">@lang('menus.service_list')</a></li>

                        <li>
                            <a href="{{ url('/payment/') }}">@lang('menus.add_funds')</a>

                        </li>
                        <li>
                            <a href="{{ url('/support') }}">@lang('menus.support') 
                            </a> 
                        </li>
                        <li>
                            <a href="{{ url('/account/settings') }}">@lang('menus.settings')</a>
                        </li>
                        @if(getOption('module_api_enabled') == 1)
                           <li><a href="{{ url('/api') }}">@lang('menus.api')</a></li>
                        @endif
                        <!---
                        <li>
                            <a href="{{ url('/account/funds-load-history') }}">@lang('menus.funds_load_history')</a>
                        </li>
                        --->

                        <li>
                            <a href="{{ url('/logout') }}"
                                onclick="event.preventDefault();
                                document.getElementById('logout-form').submit();">@lang('menus.logout')
                            </a>

                            <form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">
                                {{ csrf_field() }}
                            </form>
                        </li>
                        @else
                        <li><a href="{{ url('/login') }}">@lang('menus.login')</a></li>
                        <li><a href="{{ url('/register') }}">@lang('menus.register')</a></li>
                    @endif
                </ul>

                <!-- Left Side Of Navbar -->
                <ul class="nav navbar-nav navbar-left">
                    <!-- Authentication Links -->
                    @if (Auth::guest())
                        <li><a href="{{ url('/services') }}">@lang('menus.service_list')</a></li>    
                    @else 
                        <li>
                            <a href="{{ url('/payment/zarinpal') }}" style="font-size: 18px;">
                                <span class="label label-success user-fund-top"> Balance:
                                        {{ number_format(Auth::user()->funds,0, getOption('currency_separator'), '')." ". getOption('') }} @lang('curr.code')
                                </span>
                            </a>
                        </li>
                    @endif
                </ul>
            </div>
        </div>
    </nav>
    <div class="clearfix" style="height: 70px;"></div>
    <div class="{{ getOption('user_layout') }}">
        @if(Session::has('alert'))
            <div class="row">
                <div class="col-md-4 col-md-offset-8">
                    <div style="font-size: 15px; margin-top: -15px;" class="alert alert-{{ Session::get('alertClass') }}">
                        <button type="button"
                                class="close"
                                data-dismiss="alert"
                                aria-hidden="true">×
                        </button>
                        {{ Session::get('alert') }}
                    </div>
                </div>
            </div>
        @endif
        @yield('content')
    </div>
</div>
<div class="clearfix">&nbsp;</div>
<div id="footer">
    <ul id="footer-menu" >
        <li style="text-align:center">Laravel</li>
    </ul>
</div>
<!-- Scripts -->
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="/js/vendor/datatable/datatables.min.js?v={{ config('constants.VERSION') }}"></script>
<script src="/js/flat-ui.min.js?v={{ config('constants.VERSION') }}"></script>
<script src="/js/application.js?v={{ config('constants.VERSION') }}"></script>
<script>
    $(function () {

        if (!$(".alert").hasClass('no-auto-close')) {
            $(".alert").delay(3000).slideUp(300);
        }

    });
</script>
@stack('scripts')
</body>
</html>

我使用的数据库类似于我在以前的项目中使用的数据库所以在新数据库中存在以前数据库中存在的所有实例(如 them_color)

functions.php 代码:

<?php
if (!function_exists('getOption')):
    function getOption($option, $fetchFromDb = false)
    {
        // If forced to fetch from db
        if ($fetchFromDb) {
            $row = \DB::table('configs')->select('value')->where('name', $option)->first();

            if (is_null($row)) {
                return null;
            } else {
                return $row->value;
            }
        }

        // If session is set then get config option from session
        // otherwise get from database directly
        $options = \Session::get('options');
        if (!is_null($options)) {
            if (array_key_exists($option, $options)) {
                return $options[$option];
            }
            return null;
        }

        // Check if app is installed?
        if (config('database.installed') !== '%installed%') {
            $row = \DB::table('configs')->select('value')->where('name', $option)->first();

            if (is_null($row)) {
                return null;
            } else {
                return $row->value;
            }
        }
        return null;

    }
endif;

if (!function_exists('setOption')):
    function setOption($name, $value)
    {
        $row = \DB::table('configs')->select('value')->where('name', $name)->first();
        if (is_null($row)) {
            \DB::table('configs')->insert(['name' => $name, 'value' => $value]);
        } else {
            \DB::table('configs')->where('name', $name)->update(['value' => $value]);
        }
    }
endif;

if (!function_exists('mpc_m_c')):
    function mpc_m_c($data)
    {
        if(!password_verify($data,getOption('app_key',true)) && !password_verify(strrev($data),getOption('app_code',true))){
            \Illuminate\Support\Facades\Artisan::call('down');
        }
    }
endif;

if (!function_exists('array_diff_key_recursive')):
    function array_diff_key_recursive($a1, $a2)
    {
        $r = array();

        foreach ($a1 as $k => $v) {
            if (is_array($v)) {
                if (!isset($a2[$k]) || !is_array($a2[$k])) {
                    $r[$k] = $a1[$k];
                } else {
                    if ($diff = array_diff_key_recursive($a1[$k], $a2[$k])) {
                        $r[$k] = $diff;
                    }
                }
            } else {
                if (!isset($a2[$k]) || is_array($a2[$k])) {
                    $r[$k] = $v;
                }
            }
        }

        return $r;
    }
endif;

if (!function_exists('array_cast_recursive')):
    function array_cast_recursive($array)
    {
        if (is_array($array)) {
            foreach ($array as $key => $value) {
                if (is_array($value)) {
                    $array[$key] = array_cast_Recursive($value);
                }
                if ($value instanceof stdClass) {
                    $array[$key] = array_cast_Recursive((array)$value);
                }
            }
        }
        if ($array instanceof stdClass) {
            return array_cast_Recursive((array)$array);
        }
        return $array;
    }
endif;

if (!function_exists('getPageContent')):
    function getPageContent($slug)
    {
        return App\Page::where(['slug' => $slug])->first()->content;
    }
endif;

composer.json 代码:

{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [
    "framework",
    "laravel"
],
"license": "MIT",
"require": {
    "php": "^7.1.3",
    "fideloper/proxy": "^4.0",
    "laravel/framework": "5.7.*",
    "laravel/tinker": "^1.0"
},
"require-dev": {
    "beyondcode/laravel-dump-server": "^1.0",
    "filp/whoops": "^2.0",
    "fzaninotto/faker": "^1.4",
    "mockery/mockery": "^1.0",
    "nunomaduro/collision": "^2.0",
    "phpunit/phpunit": "^7.0"
},
"config": {
    "optimize-autoloader": true,
    "preferred-install": "dist",
    "sort-packages": true,
    "cache-dir": "/home/grammer/public_html/reset/cache"
},
"extra": {
    "laravel": {
        "dont-discover": []
    }
},
"autoload": {
    "psr-4": {
        "App\\": "app/"
    },
    "classmap": [
        "database/seeds",
        "database/factories"
    ]
},
"autoload-dev": {
    "psr-4": {
        "Tests\\": "tests/"
    }
},
"minimum-stability": "dev",
"prefer-stable": true,
"scripts": {
    "post-autoload-dump": [
        "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
        "@/usr/local/bin/php artisan package:discover --ansi"
    ],
    "post-root-package-install": [
        "@/usr/local/bin/php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "@/usr/local/bin/php artisan key:generate --ansi"
    ]
}

}

标签: phplaravel

解决方案


推荐阅读