Атрибут [livewire] не существует

#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] не существует.