laravel - Компоненты полной страницы livewire

Я использую laravel 8.

Я определяю защищенное пространство имен в RouteServiceProvider:

protected $namespace = 'App\Http\Controllers';

затем используйте livewire со следующим маршрутом:

Route::get('/xxx' , App\Http\Livewire\Counter::class);

но у меня ошибка ниже:

Invalid route action: [App\Http\Controllers\App\Http\Livewire\Counter].

Примечание: это добавляет App\Http\Controllers первым моим действием !!! если удалить protected $namespace, все в порядке. Но я не хочу его удалять.

Могу ли я иметь как ‍controller protected namespace (для пространства имен контроллера), так и Route::get для Full-Page Components?


person Mostafa Norzade    schedule 02.11.2020    source источник
comment
От Route::get('/xxx' , App\Http\Livewire\Counter::class); до Route::get('/xxx' , \App\Http\Livewire\Counter::class); перед приложением, если вы поставите `` theb, оно будет рассматривать с корневого уровня   -  person Kamlesh Paul    schedule 02.11.2020


Ответы (3)


К сожалению, вы не сможете использовать защищенное пространство имен $ вместе с Livewire. Вам нужно будет снова прокомментировать его и обновить все свои маршруты до способа laravel 8: https://laravel.com/docs/8.x/releases#routing-namespace-updates

Поскольку компоненты livewire не находятся в App \ Http \ Controllers, использование пространства имен $ никогда не будет работать.

Насколько я понимаю. Route :: livewire существовал в Livewire 1.x из-за этой проблемы в Laravel 7. Но в Laravel 8 его можно было удалить в пользу нового способа.

person Mattias    schedule 02.11.2020

Для тех, кто все еще ищет решение этой проблемы. Я столкнулся с этой проблемой при обновлении существующей установки с Laravel 7 до 8 и добавлении некоторых новых компонентов Livewire.

Вы должны иметь возможность вызывать класс прямо в маршруте, например, так:

Route::get('/blog', [\App\Http\Livewire\Pages\ShowPosts::class, '__invoke'])->name('blogs');

Это должно позволить вам использовать обычную веб-маршрутизацию Laravels.

Затем в компоненте Livewire вы можете расширить макет следующим образом:

class ShowPosts extends Component{
   ...
   public function render(){
       return view('livewire.show-posts')
        ->layout('layouts.base');
   } 
 ...}

Компоненты рендеринга

Другой вариант - удалить пространство имен из маршрутов, как описано в приведенной ниже ссылке.

Обновление маршрутов Livewire.

person J Hanlon    schedule 08.01.2021
comment
Это работает Thx alot - person Vipertecpro; 06.03.2021
comment
Рад, что смог помочь! - person J Hanlon; 16.03.2021
comment
Этот ответ должен быть принятым, поскольку он решает проблему, а ответ Маттиаса - нет. - person Augusto Moura; 24.03.2021
comment
Большое спасибо .. это помогло мне с ошибкой: Недопустимое действие маршрута - person shasi kanth; 09.07.2021

Вы можете попробовать добавить компонент livewire в начале web.php:

use App\Http\Livewire\Counter;

И в вашем маршруте:

Route::get('/xxx', Counter::class);
person Hernán Martinez Reumann    schedule 02.11.2020
comment
Спасибо, но: Недопустимое действие маршрута: [App \ Http \ Controllers \ App \ Http \ Livewire \ Counter]. - person Mostafa Norzade; 02.11.2020