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