>

컨트롤러 IndexController와 FontCorrector를 만들었습니다. 그리고 IndexController에서 FontCorrector 메소드를 사용하고 싶습니다. 내 FontCorrector 코드 :

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class FontCorrector extends Controller
{
    public function ConvertToDefault($text)  // Convert To Default
    {
        $search  = array("ғ","ӣ","ҷ","ҳ","қ","ӯ");
        $replace = array("г","и","ч","х","к","у");
        $result  = str_replace($search, $replace, $text);
        $search  = array("Ғ","Ӣ","Ҷ","Ҳ","Қ","Ӯ");
        $replace = array("Г","И","Ч","Х","К","У");
        $result  = str_replace($search, $replace, $result);
        $search  = array("ѓ","ї","љ","њ","ќ","ў");
        $replace = array("г","и","ч","х","к","у");
        $result  = str_replace($search, $replace, $result);
        $search  = array("Ѓ","Ї","Љ","Њ","Ќ","Ў");
        $replace = array("Г","И","Ч","Х","К","У");
        $result  = str_replace($search, $replace, $result);
        return $result;
    }
    public function ctd($text)
    {
        $text = $this->ConvertToDefault($text);
        return $text;
    }
?>

여기서 내 IndexController와 메서드 호출은 FontCorrector 컨트롤러 메서드를 호출하는데 성공하지 못했습니다 :

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\FontCorrector as fc;
class IndexController extends Controller
{
    public function exec(Request $request)
    {
        if($request->input('lang-input') !== null)
        {
            echo fc::ctd($request->input('lang-input'));
        }
        return view("index");
    }
}
?>

ErrorException :"정적 메소드가 아닌 App \ Http \ Controllers \ FontCorrector :: ctd ()를 정적으로 호출해서는 안됩니다"

  • 답변 # 1

    이렇게 전화 할 수 있습니다

    $fc = new FontCorrector;
    echo $fc->ctd($request->input('lang-input');
    
    

    하지만 그에 대한 특성을 만들 수있는 더 좋은 방법이 있습니다

    와이즈 비즈처럼  파일을 만든 다음

    FontCorrector.php

    app/Traits/FontCorrector.php
    
    

    IndexController

    public function ConvertToDefault($text)  // Convert To Default
    {
        ...
        return $result;
    }
    public function ctd($text)
    {
        $text = $this->ConvertToDefault($text);
        return $text;
    }
    
    

    특성에이 패키지를 사용하십시오 : https://github.com/ajayexpert/artisan-trait-maker

  • 답변 # 2

    이 문제를 해결하는 방법은 여러 가지가 있지만 가장 간단한 방법을 알려 드리겠습니다 그러나 이것은 특히 라 라벨보다 객체 지향 프로그래밍과 더 관련이 있습니다.

    메소드를 호출하기 전에 코드에서 FontCorrector를 인스턴스화해야합니다. ctd ()는 정적 메서드가 아니기 때문입니다.

    IndexController를 다음과 같이 수정하면됩니다 :

    namespace App\Http\Controllers;
    use Illuminate\Http\Request;
    use App\Traits\FontCorrector;
    class IndexController extends Controller
    {
        use FontCorrector;
        public function exec(Request $request)
        {
            if($request->input('lang-input') !== null)
            {
                echo $this->ctd($request->input('lang-input')); // call it 
            }
            return view("index");
        }
    }
    
    

    이와 같은 일을하는 데 많은 문제가 있지만 다른 일보다 먼저 일을하고 싶다는 것을 이해합니다.

  • 답변 # 3

    다른 컨트롤러에서 컨트롤러 인스턴스를 호출하거나 인스턴스화하지 않는 것이 좋습니다. 사용자 정의 도우미를 사용할 수 있습니다. 그러나 정말로 이런 식으로하고 싶다면 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\FontCorrector as fc; class IndexController extends Controller { public function exec(Request $request) { if($request->input('lang-input') !== null) { $fc_obj = new fc; echo $fc_obj->ctd($request->input('lang-input')); } return view("index"); } } ?> 에서 , 당신은 라 라벨 의존성 주입을 사용할 수 있습니다. 이것이 이것이 더 좋은 방법이라고 생각합니다.

    IndexController
    
    

  • 답변 # 4

    다른 컨트롤러에서 액세스하기 때문에 "ConvertToDefault"및 "ctd"함수를 "공용 정적 함수"로 초기화해야합니다.

    이 방법을 시도하십시오 :

    namespace App\Http\Controllers;
    use Illuminate\Http\Request;
    use App\Http\Controllers\FontCorrector;
    class IndexController extends Controller
    {
        public function exec(Request $request, FontCorrector $fc)
        {
            if($request->input('lang-input') !== null){
                echo $fc->ctd($request->input('lang-input'));
            }
            return view("index");
        }
    }
    
    

    public static function ConvertToDefault($text) // Convert To Default { $search = array("ғ","ӣ","ҷ","ҳ","қ","ӯ"); $replace = array("г","и","ч","х","к","у"); $result = str_replace($search, $replace, $text); $search = array("Ғ","Ӣ","Ҷ","Ҳ","Қ","Ӯ"); $replace = array("Г","И","Ч","Х","К","У"); $result = str_replace($search, $replace, $result); $search = array("ѓ","ї","љ","њ","ќ","ў"); $replace = array("г","и","ч","х","к","у"); $result = str_replace($search, $replace, $result); $search = array("Ѓ","Ї","Љ","Њ","Ќ","Ў"); $replace = array("Г","И","Ч","Х","К","У"); $result = str_replace($search, $replace, $result); return $result; } public static function ctd($text) { $text = TestController::ConvertToDefault($text); return $text; }

  • 이전 rnn - Tensorflow를 사용한 예측을위한 다중 계층 LSTM
  • 다음 java - PHP 페이지에서 문자열을 보내는 방법