【问题标题】:Laravel Orchid Editing an entry in a listLaravel Orchid 编辑列表中的条目
【发布时间】:2023-02-20 02:46:14
【问题描述】:

我有一个列表,其中每个条目都有一个删除按钮,它可以完美地工作,创建功能也是如此。我正在尝试添加一个编辑按钮,并且可以设法创建请求新名称的弹出窗口。

当我创建一个新条目并尝试对其进行编辑时,它会再次显示创建表单。当我尝试编辑旧条目时,它告诉我

快点!更改一些内容并尝试再次提交。 category.name 字段是必需的。

我的完整代码在这里,完成:


namespace App\Orchid\Screens;

use Orchid\Screen\Screen;
use Orchid\Screen\Fields\Input;
use Orchid\Support\Facades\Layout;
use Orchid\Screen\TD;
use Orchid\Screen\Actions\ModalToggle;
use App\Models\Category;
use Illuminate\Http\Request;
use Orchid\Screen\Actions\Button;

class CategoryScreen extends Screen
{
    /**
     * Fetch data to be displayed on the screen.
     *
     * @return array
     */
    public function query(): iterable
    {
        return [
            'categories' => Category::latest()->get(),
        ];
    }

    /**
     * The name of the screen displayed in the header.
     *
     * @return string|null
     */
    public function name(): ?string
    {
        return 'Category Screen';
    }

    /**
     * The screen's action buttons.
     *
     * @return \Orchid\Screen\Action[]
     */
    public function commandBar(): iterable
    {
        return [
            ModalToggle::make('category')
                ->icon('plus')
                ->method('create')
                ->modal('createCategory'),
        ];
    }

    /**
     * The screen's layout elements.
     *
     * @return \Orchid\Screen\Layout[]|string[]
     */
    public function layout(): iterable
    {
        return [
            Layout::table('categories', [
                TD::make('name'),

                // Create a delete button
                TD::make('Actions')
                    ->alignRight()
                    ->render(function (Category $category) {
                        return Button::make('')
                                ->icon('trash')
                                ->confirm(
                                    'After deleting, the category will be gone forever.'
                                )
                                ->method('delete', [
                                    'category' => $category->id,
                                ]);
                    }),

                TD::make('Actions')
                    ->alignRight()
                    ->render(function (Category $category) {
                        return Button::make('')
                            ->icon('pencil')
                            ->modal('editCategoryModal', [
                                'category' => $category,
                            ])
                            ->method('edit', [
                                'category' => $category->id,
                            ]);
                    }),
            ]),

            Layout::modal('createCategory', [
                Layout::rows([
                    Input::make('category.name')
                        ->title('Name')
                        ->placeholder('Enter category name'),
                ]),
            ])
                ->title('Create category')
                ->applyButton('Create'),
        ];
    }

    // Make a create method that validates name field
    public function create(Request $request)
    {
        $request->validate([
            'category.name' => 'required|max:255',
        ]);

        // Create a new category
        $category = new Category();
        $category->organisation_id = auth()->user()->organisation_id;
        $category->name = $request->category['name'];
        $category->save();
    }

    // Make a delete method that deletes the category
    public function delete(Request $request)
    {
        $category = Category::find($request->category);
        $category->delete();
    }

    // Make an edit method that validates name field
    public function edit(Request $request)
    {
        $request->validate([
            'category.name' => 'required|max:255',
        ]);

        // Update the category
        $category = Category::find($request->category->id);
        $category->name = $request->category['name'];
        $category->save();
    }

    public function editCategoryModal(): iterable
    {
        return [
            Layout::modal('editCategory', [
                Layout::rows([
                    Input::make('category.name')
                        ->title('Name')
                        ->placeholder('Enter category name'),
                ]),
            ])
                ->title('Edit category')
                ->applyButton('Save')
        ];
    }
}

我的网站看起来是这样的:

还有表格,当我按下编辑按钮(铅笔)时:

我是 Laravel Orchid 的新手,所以我承认我可能会以完全错误的方式解决这个问题,但文档不包含有关如何执行此操作的示例。 谢谢。

【问题讨论】:

    标签: php laravel orchid


    【解决方案1】:

    您应该使用异步函数在同一页面上编辑模型(使用模态) 链接:https://orchid.software/en/docs/modals/#asynchronous-data-loading

    并且您还应该在布局部分定义所有模态,而不是在单独的函数中。

    【讨论】:

      猜你喜欢
      • 2020-06-05
      • 2020-09-22
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2015-07-17
      相关资源
      最近更新 更多