如何在 Laravel 中使用同一个 Blade 模板来添加和编辑一个控制器?

Hol*_*dMy 5 php crud laravel laravel-blade

我有一个问题,我使用相同的刀片模板来创建和插入。在我的控制器中,我在编辑功能和我使用的方法模板上创建了一个变量 ModificationMode isset()

控制器

public function edit($id)
{
    $ModificationMode = 0;
    $DataPraticien = \App\Praticien::find($id);

    return view('AjoutePraticien', compact('DataPraticien'))->with('ModificationMode', $ModificationMode);
}
Run Code Online (Sandbox Code Playgroud)

看法

@if(isset($ModificationMode))

<form method="post" action="{{route('prat.update', $DataPraticien ?? '')}}">
@csrf
@method('PATCH')
    @else
    <form action="{{route('prat.store')}}" method="post">
        @endif
//stuff
//stuff
Run Code Online (Sandbox Code Playgroud)

我将每个变量设为可选。这是一个好主意吗?这种方法会给我带来一些问题吗?安全怎么样?

Mad*_*tel 6

在这里我只是用一个小例子向您解释如何使用相同的表单进行添加和编辑。当我需要做同样的事情时,我会这样做:

// routes.php
Route::get('test', 'TestController@create');
Route::get('test/{id}', 'TestController@edit');
Run Code Online (Sandbox Code Playgroud)

控制器.php

// TestController.php
public function create()
{
    return view('form');
}

public function edit($id)
{
    $resource = Resource::find($id);

    return view('form', compact('resource'));
}
Run Code Online (Sandbox Code Playgroud)

刀片锉刀

// form.blade.php
<h2>{{ isset($resource) ? 'Edit a Record' : 'Create a new Record' }}</h2>

<form action="{{ isset($resource) ? '/test/' . $resource->id : '/test' }}" method="post">
    <label>Title</label>
    <input type="text" name="title" value="{{ old('title', isset($resource) ? $resource->title : '') }}" />

    <label>Description</label>
    <textarea name="description">{{ old('description', isset($resource) ? $resource->description : '') }}</textarea>

    <button type="submit">{{ isset($resource) ? 'Update' : 'Create' }}</button>
</form>
Run Code Online (Sandbox Code Playgroud)


Sha*_*ain 0

我认为你是对的。如果我的形式很简单,那么我也会做类似的事情。$ModificationMode我不需要一个变量。我做什么...

@if(isset($DataPraticien))

    <form method="post" action="{{route('prat.update', $DataPraticien ?? '')}}">
    @method('PATCH')
@else
    <form action="{{route('prat.store')}}" method="post">
@endif
  @csrf
Run Code Online (Sandbox Code Playgroud)