0

我是 Laravel 和 Stackoverflow 的新手

当 Laravel7 发布时,我开始学习 Laravel。不久前推出了新的8.0版本,我开始尝试。

我无法定义问题是由较新版本的 Laravelor 任何错误配置引起的。

当我尝试以下(edit.blade.php)

{!! Form::open(['action' => ['ProductController@update', $product->id], 'method' => 'POST']) !!}

或者

{!! Form::open(['action' => [[ProductController::class, 'update'], $product->id], 'method' => 'POST']) !!}

发生错误

动作 ProductController@update 未定义

然后我尝试用类似的路径替换控制器名称

{!! Form::open(['action' => ['App\Http\Controllers\ProductController@update', $product->id], 'method' => 'POST']) !!}

或者

{!! Form::open(['action' => [[App\Http\Controllers\ProductController::class, 'update'], $product->id], 'method' => 'POST']) !!}

有用!

所以我认为这是关于命名空间

namespace App\Http\Controllers;但我的App\Http\ProductController.php 中有一个命名空间标题

虽然我可以通过集体形式输入控制器的完整路径来解决问题,但我担心我的代码有配置错误或语法错误等。

4

3 回答 3

0

这是对 Laravel 8 的更改。默认情况下,您的路由没有应用命名空间前缀,并且在生成“动作”的 URL 时没有使用命名空间前缀。

要在生成操作的 URL 时尝试引用的控制器的命名空间前缀,您需要$namespace在您的 : 上定义属性App\Providers\RouteServiceProvider

protected $namespace = 'App\Http\Controllers';

现在您可以使用该命名空间前缀引用您的操作:

Form::open(['action' => ['ProductController@update', $product->id], 'method' => 'POST'])
于 2020-09-15T16:17:53.087 回答
0

在 Laravel 8 中:使用此代码我认为您的问题将得到解决

网页.php

Route::middleware(['auth:sanctum', 'verified'])->group(function () {
    Route::get('create', 'Product\ProductController@Create')->name('product.create')->middleware('can:Add Product');
    Route::post('create', 'Product\ProductController@Store')->name('product.store')->middleware('can:Add Product');
});

资源/视图/产品:

<form method="post" action="{{ route('product.store') }}"  enctype="multipart/form-data">
    @csrf
    {{-- START - PRODUCT INFORMATION --}}

    {{-- END- PRODUCT INFORMATION --}}
</form>

应用程序/Http/控制器/产品:

<?php
namespace App\Http\Controllers\Products;

use App\Http\Requests\Product\ProductRequest;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class ProductController extends Controller {
    //---Constructor Function
    public function __construct() {
        $this->middleware('auth:sanctum');
    }//---End of Function Constructor

    //---Create Product
    public function create() {
        return view('product.product_add');
    }//---End of Function create

    //---Store Product in Database
    public function store(ProductRequest $request) {
        //---Add Product Details in DB
    }
?>
于 2021-03-09T05:23:11.057 回答
0

Laravel 8 : Collective form - 用于创建 Laravel 视图页面

            {!! Form::open(['route' => '', 'id'=>'form','class' => 'needs-validation',]) !!}           
           
                <div class="form-group row">
                    {!! Form::label('employee_id', 'Employee ID:', ['class'=>'col-md-1 col-form-label  custom_required']) !!}
                         
                <!-- Employee ID -->
                <div class="form-group row">
                    {!! Form::label('employee_name', 'Employee Name:', ['class'=>'col-md-1 col-form-label  custom_required']) !!}
                    <div class="col-lg-8">
                        {!! Form::text('employee_name', @$employee_id, ['class' => 'form-control', 'required', 'placeholder' => 'Employee Name', 'pattern'=> '^[a-z A-Z0-9_.-]*$']) !!}
                                   
                </div>     
                 <!-- Employee number -->
                 <div class="form-group row">
                    {!! Form::label('phone_number', 'Number:', ['class'=>'col-md-1 col-form-label  custom_required']) !!}
                    <div class="col-lg-8">
                        {!! Form::text('phone_number', @$phone_number, ['class' => 'form-control', 'required','placeholder' => 'number']) !!}
                     
                </div>    
                      
                {!! Form::close()  !!}          
             
于 2021-03-29T17:13:14.233 回答