[英]laravel - livewire Full-Page Components
我使用 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
?
對於那些仍在尋找解決方案的人。 在將現有安裝從 Laravel 7 升級到 8 並添加一些新的 Livewire 組件時,我遇到了這個問題。
您應該能夠像這樣直接在 Route 中調用該類,
Route::get('/blog', [\App\Http\Livewire\Pages\ShowPosts::class, '__invoke'])->name('blogs');
這應該允許您使用 Laravel 常規網絡路由。
然后在您的 Livewire 組件中,您可以像這樣擴展布局,
class ShowPosts extends Component{
...
public function render(){
return view('livewire.show-posts')
->layout('layouts.base');
}
...}
另一種選擇是從 Routes 中刪除命名空間,如下面的鏈接中所述。
不幸的是,您將無法將受保護的 $namespace 與 Livewire 一起使用。 您必須將其注釋掉並更新到 laravel 8 方式的所有路由:https ://laravel.com/docs/8.x/releases#routing-namespace-updates
因為 livewire 組件不在 App\\Http\\Controllers 下,所以使用 $namespace 永遠不會起作用。
據我了解。 由於 Laravel 7 中的這個問題,Route::livewire 存在於 Livewire 1.x 中。但是在 Laravel 8 中它可以被移除以支持新的方式。
為了不修改其命名空間的RouteServiceProvider.php
文件,請將app\\Http\\Livewire
目錄移動到app\\Http\\Controllers\\Livewire
。
改變這個
namespace App\Http\Livewire;
use Livewire\Component;
class Counter extends Component
{
//
}
對此
namespace App\Http\Controllers\Livewire; // <---- added Controllers
use Livewire\Component;
class Counter extends Component
{
//
}
從此修改config/livewire
文件
'class_namespace' => 'App\\Http\\Livewire',
對此
'class_namespace' => 'App\\Http\\Controllers\\Livewire', // <---- Controllers added
bootstrap\\cache
。composer dumpautoload
。 之后,您使用php artisan livewire:make
任何新 livewire 都應該進行修改。 您應該將namespace App\\Http\\Livewire
更改為namespace App\\Http\\Controllers\\Livewire
。
移除:Route::livewire()
Livewire 1.x 允許您使用 Route::livewire() 方法為整個頁面注冊一個帶有路由的組件。 Livewire 2.0 現在允許您使用標准的 Route::get() 方法和完全限定的命名空間將 Livewire 組件直接傳遞到路由中。
// 前
Route::livewire('/post', 'show-posts');
// 后
您可以嘗試在web.php
添加您的 livewire 組件:
use App\Http\Livewire\Counter;
在你的路線中:
Route::get('/xxx', Counter::class);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.