Laravel LiveWire 2 : 我们是否必须制作一个新的 class 或者我们可以像传统控制器那样做
Laravel LiveWire 2 : Do we have to make a new class or we can do like traditional Controller
所以,这是我的第一个 LiveWire
学习项目。
直截了当,我正在使用 php artisan make:livewire user
创建一个名为 User 的 Livewire 组件
然后这就是我得到的
第一个User.php
<?php
namespace App\Http\Livewire;
use Livewire\Component;
class User extends Component
{
public function render()
{
return view('livewire.user.index'); //i've updated this
}
}
所以,我想在不同的页面创建一个用户。 注意:我已经为 SPA 使用了 turbolinks,当我像传统的 Laravel 控制器一样创建时
Web.php
Route::get('/user', User::class)->name('user.index');
Route::get('/user/create',[User::class, 'create'])->name('user.create');
User.php(火线组件)
<?php
namespace App\Http\Livewire;
use Livewire\Component;
class User extends Component
{
public function render()
{
return view('livewire.user.index');
}
// This is what i create
public function create()
{
return view('livewire.user.create')
->extends('layouts.app')
->section('contents');
}
}
它没有给我父模板(它没有运行进入layouts.app并转到目录,它只显示空白页),我尝试用 layouts.app 和
部分对其进行扩展
layouts/app.blade.php
<div class="flex h-screen bg-gray-50 dark:bg-gray-900" :class="{ 'overflow-hidden': isSideMenuOpen }">
@include('layouts.include._sidebar')
<div class="flex flex-col flex-1 w-full">
@include('layouts.include._navbar')
<main class="h-full overflow-y-auto">
<div class="container px-6 mx-auto grid">
{{-- {{ $slot }} --}}
@yield('contents')
</div>
</main>
</div>
</div>
我的问题:
我们可以像标准 laravel 控制器一样使用 public 函数在用户组件中创建 或者我们必须 创建一个新组件调用了 UserCreate?谢谢!
您可以使用 livewire 作为整页组件或使用 <livewire:component-name />
在您的视图中加载的组件
您只能拥有 Livewire 生成的“控制器”User.php
,或者您可以拥有一个经典的 Laravel 控制器,您可以从那里 return 一个 blade 视图并在您的blade 查看您可以使用 <livewire:component-name />
.
加载 livewire 组件
在您的情况下,我认为在渲染方法中您必须 return livewire.user
并且在您的 blade 视图中加载它,如上所述。
你可以通过不同的方式来处理这个问题,这取决于你。
可以有一个 UserForm 组件来处理 create/edit 表单,并在用户的创建组件调用中呈现 UserForm 组件以创建新的表单。
public function create()
{
return redirect()->route('user.create');
}
在web.php
Route::get('/user/create', [UserForm::class])->name('user.create');
Route::get('/user/edit/{user?}', [UserForm::class])->name('user.edit');
和用户窗体组件
public $email, $name;
public $user;
public $option = '';
public function mount($user = null)
{
if(is_null($user)) {
// some initialization
$this->option = 'create';
}
else {
$this->user = User::find($user);
$this->option = 'edit';
}
}
public function render()
{
return view('user-form');
}
public funcion store()
{
if($this->option == 'create') {
//create handler
}
else {
//edit handler
}
}
改为使用重定向,您可以使用模式并在用户组件中的模式内呈现用户窗体。正如我告诉过你的,这可以通过不同的方式来完成
所以,这是我的第一个 LiveWire
学习项目。
直截了当,我正在使用 php artisan make:livewire user
然后这就是我得到的
第一个User.php
<?php
namespace App\Http\Livewire;
use Livewire\Component;
class User extends Component
{
public function render()
{
return view('livewire.user.index'); //i've updated this
}
}
所以,我想在不同的页面创建一个用户。 注意:我已经为 SPA 使用了 turbolinks,当我像传统的 Laravel 控制器一样创建时
Web.php
Route::get('/user', User::class)->name('user.index');
Route::get('/user/create',[User::class, 'create'])->name('user.create');
User.php(火线组件)
<?php
namespace App\Http\Livewire;
use Livewire\Component;
class User extends Component
{
public function render()
{
return view('livewire.user.index');
}
// This is what i create
public function create()
{
return view('livewire.user.create')
->extends('layouts.app')
->section('contents');
}
}
它没有给我父模板(它没有运行进入layouts.app并转到目录,它只显示空白页),我尝试用 layouts.app 和
部分对其进行扩展layouts/app.blade.php
<div class="flex h-screen bg-gray-50 dark:bg-gray-900" :class="{ 'overflow-hidden': isSideMenuOpen }">
@include('layouts.include._sidebar')
<div class="flex flex-col flex-1 w-full">
@include('layouts.include._navbar')
<main class="h-full overflow-y-auto">
<div class="container px-6 mx-auto grid">
{{-- {{ $slot }} --}}
@yield('contents')
</div>
</main>
</div>
</div>
我的问题:
我们可以像标准 laravel 控制器一样使用 public 函数在用户组件中创建 或者我们必须 创建一个新组件调用了 UserCreate?谢谢!
您可以使用 livewire 作为整页组件或使用 <livewire:component-name />
您只能拥有 Livewire 生成的“控制器”User.php
,或者您可以拥有一个经典的 Laravel 控制器,您可以从那里 return 一个 blade 视图并在您的blade 查看您可以使用 <livewire:component-name />
.
在您的情况下,我认为在渲染方法中您必须 return livewire.user
并且在您的 blade 视图中加载它,如上所述。
你可以通过不同的方式来处理这个问题,这取决于你。 可以有一个 UserForm 组件来处理 create/edit 表单,并在用户的创建组件调用中呈现 UserForm 组件以创建新的表单。
public function create()
{
return redirect()->route('user.create');
}
在web.php
Route::get('/user/create', [UserForm::class])->name('user.create');
Route::get('/user/edit/{user?}', [UserForm::class])->name('user.edit');
和用户窗体组件
public $email, $name;
public $user;
public $option = '';
public function mount($user = null)
{
if(is_null($user)) {
// some initialization
$this->option = 'create';
}
else {
$this->user = User::find($user);
$this->option = 'edit';
}
}
public function render()
{
return view('user-form');
}
public funcion store()
{
if($this->option == 'create') {
//create handler
}
else {
//edit handler
}
}
改为使用重定向,您可以使用模式并在用户组件中的模式内呈现用户窗体。正如我告诉过你的,这可以通过不同的方式来完成