Php 参数1传入Laravel错误。我不知道';我不知道如何解决这个错误

Php 参数1传入Laravel错误。我不知道';我不知道如何解决这个错误,php,laravel,Php,Laravel,我目前正在使用语言检测和语言翻译API。但是,这个函数在所有控制器上都能很好地工作,但是请求ajax,它的错误与标题相同 ajax $("#translationBtn").click(function(){ $.ajax({ url: '{{route('translation')}}', type: 'post', data: {_token: "{{ csrf_token() }}", 'materia

我目前正在使用语言检测和语言翻译API。但是,这个函数在所有控制器上都能很好地工作,但是请求ajax,它的错误与标题相同

ajax

$("#translationBtn").click(function(){
    $.ajax({
        url: '{{route('translation')}}',
        type: 'post',
        data: {_token: "{{ csrf_token() }}",
                'material': $('#translationBox').val(),
            },
        success: function (data) {

            alert(data);

        }, error: function () {
            alert("error!!!!");
        }
    });
});
控制器 控制器检查通过ajax接收的值

<?php

namespace App\Http\Controllers\Home;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Helper\Translation;

class TranslationController extends Controller
{
    use Translation;

    public function translation(Request $request){

       return $this->translation($request->material,$this>langCode($request->material));

    }
}
API

<?php

namespace App\Http\Controllers\Helper;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

trait Translation 
{

     public static function langCode($papago){

        $client_id      =  config('papago.client_sening_id');
        $client_secret  =  config('papago.client_sening_secret');
        $encQuery = urlencode($papago);
        $postvars = "query=".$encQuery;
        $url = "https://openapi.naver.com/v1/papago/detectLangs";
        $is_post = true;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, $is_post);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch,CURLOPT_POSTFIELDS, $postvars);
        $headers = array();
        $headers[] = "X-Naver-Client-Id: ".$client_id;
        $headers[] = "X-Naver-Client-Secret: ".$client_secret;
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        $response = curl_exec ($ch);
        $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        //   echo "status_code:".$status_code."<br>";
        curl_close ($ch);
        if($status_code == 200) {
            // echo $response['langCode'];
            $json = json_decode($response, true);
            $langCode = $json['langCode']; 
        } else {
            echo "점검 중";
            // echo "Error 내용:".$response;
        }
        return $langCode;    
    }

    public static function translation($papago,$langCode) {

          $client_id      = config('papago.client_language_translation_id');
          $client_secret  = config('papago.client_language_translation_secret');
          $encText = urlencode($papago);


          if($langCode == "ko"){
            $postvars = "source=ko&target=ja&text=".$encText;

          }else if($langCode == "ja"){
            $postvars = "source=ja&target=ko&text=".$encText;

          }else{
            $postvars = "source=ko&target=ja&text=".$encText;
          }

          $url = "https://openapi.naver.com/v1/language/translate";
          $is_post = true;
          $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, $url);
          curl_setopt($ch, CURLOPT_POST, $is_post);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($ch,CURLOPT_POSTFIELDS, $postvars);
          $headers = array();
          $headers[] = "X-Naver-Client-Id: ".$client_id;
          $headers[] = "X-Naver-Client-Secret: ".$client_secret;
          curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
          $response = curl_exec ($ch);
          $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
          //   echo "status_code:".$status_code."<br>";
          curl_close ($ch);

          if($status_code == 200) {  
            $json = json_decode($response, true);   //json_decode는  디코딩 된 json문자열을 연관배열로 만든다.
            $translation = $json['message']['result']['translatedText']; 

        } else {
            $translation = '점검 중';
            //   echo "Error 내용:".$response;
          }
          return  $translation;
    }
}

您正在中使用函数名
翻译
Class TranslationController
Trait Translation
。一个是
静态
,另一个是
实例
。 调用
实例
方法而不是
静态
。 最好使用不同的名称以避免混淆

您当前的代码正在执行递归,而不是使用trait方法


将trait方法重命名为其他方法并尝试。

问题是什么?错误消息似乎解释了这个问题,控制器类中的转换方法要求第一个参数的类型为
illighted\Http\Request
。修复方法是传递预期对象,否?
返回$this->translation($request->material,$this>langCode($request->material))是错误的
translation
是一个静态函数,您可能会因为使用trait而感到困惑,并且在控制器和控制器使用的trait中具有相同的方法名称。如@Jonnix所说,这可能是由于您的控制器方法名和trait方法名相同所致。实际上,您是在用相同的方法调用
TranslationController::translation()
。在我的方法名称中,我也会使用动词而不是名词。你错过了这么一件小事!非常感谢。多亏了我的朋友,我觉得自己长大了!
<?php

namespace App\Http\Controllers\Helper;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

trait Translation 
{

     public static function langCode($papago){

        $client_id      =  config('papago.client_sening_id');
        $client_secret  =  config('papago.client_sening_secret');
        $encQuery = urlencode($papago);
        $postvars = "query=".$encQuery;
        $url = "https://openapi.naver.com/v1/papago/detectLangs";
        $is_post = true;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, $is_post);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch,CURLOPT_POSTFIELDS, $postvars);
        $headers = array();
        $headers[] = "X-Naver-Client-Id: ".$client_id;
        $headers[] = "X-Naver-Client-Secret: ".$client_secret;
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        $response = curl_exec ($ch);
        $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        //   echo "status_code:".$status_code."<br>";
        curl_close ($ch);
        if($status_code == 200) {
            // echo $response['langCode'];
            $json = json_decode($response, true);
            $langCode = $json['langCode']; 
        } else {
            echo "점검 중";
            // echo "Error 내용:".$response;
        }
        return $langCode;    
    }

    public static function translation($papago,$langCode) {

          $client_id      = config('papago.client_language_translation_id');
          $client_secret  = config('papago.client_language_translation_secret');
          $encText = urlencode($papago);


          if($langCode == "ko"){
            $postvars = "source=ko&target=ja&text=".$encText;

          }else if($langCode == "ja"){
            $postvars = "source=ja&target=ko&text=".$encText;

          }else{
            $postvars = "source=ko&target=ja&text=".$encText;
          }

          $url = "https://openapi.naver.com/v1/language/translate";
          $is_post = true;
          $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, $url);
          curl_setopt($ch, CURLOPT_POST, $is_post);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($ch,CURLOPT_POSTFIELDS, $postvars);
          $headers = array();
          $headers[] = "X-Naver-Client-Id: ".$client_id;
          $headers[] = "X-Naver-Client-Secret: ".$client_secret;
          curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
          $response = curl_exec ($ch);
          $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
          //   echo "status_code:".$status_code."<br>";
          curl_close ($ch);

          if($status_code == 200) {  
            $json = json_decode($response, true);   //json_decode는  디코딩 된 json문자열을 연관배열로 만든다.
            $translation = $json['message']['result']['translatedText']; 

        } else {
            $translation = '점검 중';
            //   echo "Error 내용:".$response;
          }
          return  $translation;
    }
}