web.php
Route::get('/', function () {
return view('index');
});
Route::get('/', [App\Http\Controllers\HomeController::class, 'index']);
Route::get('/', [App\Http\Controllers\MovieDataController::class, 'init']); // <-- after this page breaks down
NivueDataController.php
<?php
namespace App\Http\Controllers;
use App\Models\movieData;
class MovieDataController extends Controller
{
public function init(){
MovieDataController::console_log("init called");
MovieDataController::getPopular();
MovieDataController::index();
}
///////////////////////////FOR DBG PURPOSES ONLY////////////////////////////////////////
function console_log($output, $with_script_tags = true) {
$js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) .
');';
if ($with_script_tags) {
$js_code = '<script>' . $js_code . '</script>';
}
echo $js_code;
}
///////////////////////////FOR DBG PURPOSES ONLY////////////////////////////////////////
public function index()
{
MovieDataController::console_log("returning index view");
return view('index');
}
protected function create(string $data)
{
return movieData::create([
'movie_id' => $data,
]);
}
function getPopular(){
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL =>
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-RapidAPI-Host:",
"X-RapidAPI-Key: "
],
]);
$response = json_decode(curl_exec($curl));
$err = curl_error($curl);
$response = str_replace('/title/', '', $response);
$response = str_replace('/', '', $response);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
}
else {
$arrayt = [];
foreach ($response as $key => $value) {
array_push($arrayt, $response[$key]);
}
foreach ($arrayt as $key => $value) {
MovieDataController::create($arrayt[$key]);
}
}
}
}
我已经尝试解决这个问题了几个小时,现在我还没有能够找出为什么MovieDataController打破我的网站分开。
我已经尝试调试日志记录,看看是否有东西进入循环/或冻结它,但我还不能确定什么问题。
编辑:通过打破我的网站,我的意思是我的看法是没有了,它只是一个空白页。
1条答案
按热度按时间hxzsmxv21#
调试
首先,您只需要在
/
处声明一个路由-它们不可能都有相同的URI。日志告诉你什么?(
/storage/logs/laravel.*
)发布日志?路线可见性
Laravel路由必须是PUBLIC不受保护或私有的....您还在
foreach
中静态调用它,并且该函数未声明为静态。这可能不是您的问题,但Laravel控制器使用特定动词(例如create
),因此您可能应该重命名create()
函数以避免出现问题-通常,直接调用Model::create()
,而不是使用helper-function。如果在创建时需要执行某个常见任务,请查看EloquentModelEvents,DTOs,或者甚至是一个分离的服务--通常最好的做法是不要在控制器上有其他的功能。(验证甚至被推迟到请求)。路由声明:
您正在声明三个到
GET /
的不同路由。请尝试以下操作:控制器
使用CURL
使用
Illuminate\Support\Facades\Http
你为什么要使用
curl_init()
?现在是2022年?使用Laravel的HTTP
外观((docs)[https://laravel.com/docs/9.x/http-client])。它好得多,让测试变得容易得多。真实的可能会抛出一个异常,而该异常要么是您遗漏的,要么是明显的,要么是由
HTTP
外观处理的。JSON解析
可能是解析JSON失败并挂起。查看处理错误的方法并仔细检查PHP版本(如果可能的话请更新!)。您甚至可以查看使用DTO库来处理解析响应(Spatie Laravel-Data)
尽快关闭CURL连接
如果您坚持使用
curl
,请尽快关闭连接(在str_replace()
之前)Lint文件
您的格式可能已关闭和/或可能缺少右括号-尽管如此,这可能会产生不同的错误(日志?)。请尝试运行
php -l /path/to/controller.php
。额外学分(PR复习学习备注)
函数命名
与snake_cases相比,Laravel更喜欢CamelCase函数。将此扩展到除原始
Model->attribute_name
之外的所有函数。例如
MovieDataController::console_log() -> MovieDataController::consoleLog()
* 在后端看到console_log
也很奇怪,因为它是一个JavaScript函数... Laravel/PHP使用dump/var_dump
-尽可能遵循现有的标准。