簡體   English   中英

laravel - livewire 整頁組件

[英]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::getFull-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 中刪除命名空間,如下面的鏈接中所述。

升級 Livewire 路由

不幸的是,您將無法將受保護的 $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM