Я пишу свое первое приложение на Laravel, которое также включает Vue. Я новичок в Laravel и Vue, поэтому будьте осторожны ;-) Я использую Laravel 8.4.x и Vue 2.6.12 в Windows 10.
В моем самом первом вызове axios я пытаюсь записать одну запись в таблицу базы данных в методе отправки моего компонента Vue, я получаю код состояния Http 500, внутренняя ошибка сервера. В ответе в консоли говорится, что Laravel не видит контроллер с именем ToDoController. Я понятия не имею, почему это могло быть, поскольку я создал его правильно с помощью php artisan, и я могу видеть это в VS Code.
Просматривая другие сообщения, чтобы попытаться понять эту проблему, я вижу, что люди рекомендуют просматривать журналы сервера, чтобы найти дополнительную информацию. Я не уверен, что в журналах будет информация, не найденная в ответе в консоли браузера, но я не узнаю, пока не посмотрю. Проблема в том, что я не знаю, где искать свой журнал.
Согласно документации Laravel, ведение журнала регулируется config / logging.php, и в этом файле говорится:
<?php
use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;
return [
/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that gets used when writing
| messages to the logs. The name specified in this option should match
| one of the channels defined in the "channels" configuration array.
|
*/
'default' => env('LOG_CHANNEL', 'stack'),
/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Drivers: "single", "daily", "slack", "syslog",
| "errorlog", "monolog",
| "custom", "stack"
|
*/
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => env('LOG_LEVEL', 'critical'),
],
'papertrail' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => SyslogUdpHandler::class,
'handler_with' => [
'host' => env('PAPERTRAIL_URL'),
'port' => env('PAPERTRAIL_PORT'),
],
],
'stderr' => [
'driver' => 'monolog',
'handler' => StreamHandler::class,
'formatter' => env('LOG_STDERR_FORMATTER'),
'with' => [
'stream' => 'php://stderr',
],
],
'syslog' => [
'driver' => 'syslog',
'level' => env('LOG_LEVEL', 'debug'),
],
'errorlog' => [
'driver' => 'errorlog',
'level' => env('LOG_LEVEL', 'debug'),
],
'null' => [
'driver' => 'monolog',
'handler' => NullHandler::class,
],
'emergency' => [
'path' => storage_path('logs/laravel.log'),
],
],
];
Если я правильно понимаю, это означает, что ошибки в DEBUG или выше записываются в logs / laravel.log, что я должен видеть в VS Code. Но у меня даже нет каталога журналов, не говоря уже о файле laravel.log.
Нужно ли мне что-то делать для создания этих журналов в первую очередь в рамках создания нового проекта? Если так, то? Если нет, то почему я не вижу свой журнал? Ошибка сервера достаточно значительна, чтобы ее записали в журнал, верно?
Кроме того, пока мы говорим о журналах, у меня есть вопрос о курице и яйце: устанавливается ли значение LOG_CHANNEL в файле logging.php из файла .env или файл .env получает значение в журнале .php файл? Другими словами, если я хочу изменить свое поведение при ведении журнала, что мне изменить?
2 ответа
Каталог журналов находится в каталоге хранилища. Итак, это хранилище / журналы / laravel.log.
Кроме того, вы можете выбрать регистрацию всего, что хотите, с помощью фасада журнала. См. Запись сообщений журнала laravel [https://laravel.com/docs/8.x/logging#writing-log-messages]. Все, что заключено в функцию env (), извлекается из файла env. Второй параметр позволяет вам установить значение по умолчанию, если это значение не установлено или не доступно в файле env. 1
@Donkarnash - Я очень подозреваю, что вы определили проблему. Я не в курсе новых возможностей Laravel 8. Как бы выглядел мой маршрут, если бы у меня был FQCN для контроллера? Я пробовал все возможные варианты, но ничего не работает, включая url ('app / Http / Controllers / ToDoController')
Начиная с Laravel 8 пространство имен по умолчанию App\Http\Controllers
не установлено в RouteServiceProvider, что является долгожданным изменением.
Итак, теперь при определении маршрутов в файлах маршрутов необходимо использовать routes/web.php
FQCN контроллера.
use App\Http\Controllers\ToDoController;
Route::get('/todos', [ToDoController::class, 'index']);
//OR without importing the use statement
Route::get('/todos', [\App\Http\Controllers\ToDoController::class, 'index']);
Если вы хотите, вы также можете использовать метод пространства имен для групп маршрутов
Route::namespace('App\Http\Controllers')
->group(function(){
Route::get('/todos', 'ToDoController@index');
Route::get('/todos/{todo}', 'ToDoController@show');
});
Использование FQCN, как при импорте инструкции использования, так и при встроенном, также обеспечивает преимущества простой навигации и предложений кода в среде IDE.
Чтобы вернуться к старому соглашению и установить пространство имен по умолчанию, вы должны объявить пространство имен $ в RouteServiceProvider
/**
* The controller namespace for the application.
*
* When present, controller route declarations will automatically be prefixed with this namespace.
*
* @var string|null
*/
protected $namespace = 'App\\Http\\Controllers';
Похожие вопросы
Связанные вопросы
Новые вопросы
laravel
Платформа Laravel — это веб-инфраструктура PHP с открытым исходным кодом, которая позволяет разработчикам создавать динамические и масштабируемые веб-приложения. Исходный код Laravel размещен на GitHub и выпущен под лицензией MIT.