#php #laravel #laravel-livewire
#php #laravel #laravel-livewire
Вопрос:
У меня возникли проблемы с запуском моего кода для маршрутизации Laravel 8 с помощью laravel-livewire.
Класс находится внутри LivewireLandingPage
.
Ошибка, которую я получаю, это
Атрибут [livewire] не существует
Вот мои маршруты
<?php
use IlluminateSupportFacadesRoute;
Route::livewire('/' , 'LandingPage');
Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
return view('dashboard');
})->name('dashboard');
Комментарии:
1. с какой ошибкой вы столкнулись? пожалуйста, добавьте журнал ошибок сюда
Ответ №1:
Если вы используете недавнюю установку Laravel 8, у вас будет Livewire V2. В этой версии Route::livewire()
был удален. Вместо этого вы указываете обычный get()
маршрут, при этом действие является классом компонента Livewire.
Route::get('/' , AppHttpLivewireLandingPage::class);
Комментарии:
1. Еще один отличный вопрос, закрытый на SO … не забудьте поменять
@yield('content')
на{{ $slot }}
в вашемapp.blade.php
также для преобразования в V2.2. Да, это не тот вопрос, который следовало закрыть. Я попросил снова открыть его. Тем не менее, вы можете использовать либо
yield
/section
, как и раньше, либо слоты. Зависит от того, используете ли вы части или компоненты; это разные вещи для достижения одной и той же цели.3. в laravel 8 yield / section у меня не работал.
4. Хотя это не связано с этим вопросом, прочитайте руководство по обновлению по адресу laravel-livewire.com/docs/2.x/upgrading
Ответ №2:
Если вы используете livewire v1.x, пожалуйста, используйте эту аннотацию :
//(livewire v1.x)
Route::livewire('/post', 'LandingPage');
Если вы используете livewire версии v2.0, пожалуйста, используйте этот :
//(livewire v2.x)
Route::get('/post', AppHttpLivewireLandingPage::class);
Ответ №3:
Из ошибки следует, что у вас нет настройки системы авторизации:
Route::group(['middleware' => 'auth'], function () {
// Only with LiveWire v1
//Route::livewire('/blog', 'blog')->section('blog');
// For LiveWire 2.
Route::get('/blog' , 'BlogController@index');
});
Вы вызываете auth
промежуточное программное обеспечение, и ошибка указывает, что в настоящее время LoginController отсутствует в AuthLoginController
Есть ли у вас какие-либо настройки auth scaffolding?
Не понимал, что это такой старый поток.
Ответ №4:
С Laravel 8.29 и LiveWire 2.4.0
UnexpectedValueException Недопустимое действие маршрута: [App Http ControllersApp Http LivewireBlog].
Я думаю, что лучше, если вам нужно создать новый контроллер в App Http Controllers и связать маршрут с этим контроллером. В представлении используйте @liveware для вашего контроллера LiveWire.
Route::group(['middleware' => 'auth'], function () {
// Only with LiveWire v1
//Route::livewire('/blog', 'blog')->section('blog');
// For LiveWire 2.
Route::get('/blog' , 'BlogController@index');
});
AppHttpControllersBlogController.php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class BlogController extends Controller
{
public function index(){
return view('blog.index');
}
}
resources/views/blog/index.blade.php
@livewire('blog')
Примечание:
С исправлением (https://laravel-livewire.com/docs/2.x/upgrading )
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->namespace) // Remove me
->group(base_path('routes/web.php'));
}
у вас возникнут проблемы с маршрутами в промежуточных программах
Целевой класс IlluminateContractsContainerBindingResolutionException [Auth LoginController] не существует.