Laravel 8 上的 ArgumentCountError

Posted

技术标签:

【中文标题】Laravel 8 上的 ArgumentCountError【英文标题】:ArgumentCountError on Laravel 8 【发布时间】:2021-10-01 09:35:53 【问题描述】:

我正在使用 laravel 8,当我这样写路由时:

web.php

Route::match(['get', 'post'], '/', [PageController::class, 'index']);

Route::match(['get', 'post'], '/tshirt', [PageController::class, 'productCategory']);
Route::match(['get', 'post'], '/electronic', [PageController::class, 'productCategory']);

Route::match(['get', 'post'], '/tshirt/slug', [PageController::class, 'detail']);
Route::match(['get', 'post'], '/electronic/slug', [PageController::class, 'detail']);

和这样的控制器:

PageController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PageController extends Controller

    public function index()
    
        $data = [
            'title' => 'Dashboard',
        ];

        return view('pages.index', $data);
    

    public function productCategory($category)
    
        # code...
    

    public function detail($category, $detail)
    
        # code...
    

我想要的是,如果当用户位于 url '/tshirt' 或 '/electronic' 时,thshirt 或 electronic 将包含在 PageController::productCategory 的 $category 参数中

类似地,当用户输入“/tshirt/nameoftshirt”时,PageController::detail 控制器将用“tshirt”填充$category 参数,用“nameoftshirt”填充$slug

它显示了这个错误:

ArgumentCountError
Too few arguments to function App\Http\Controllers\PageController::productCategory(), 0 passed in D:\Programing\Web\laraApp\vendor\laravel\framework\src\Illuminate\Routing\Controller.php on line 54 and exactly 1 expected

如何获取路由以将主要参数传递给控制器​​?

【问题讨论】:

【参考方案1】:

您必须使主类别动态化,然后您可以像现在尝试的那样在控制器中捕获它。这样您就不必为每个类别制作路线。

Route::match(['get', 'post'], '/category', [PageController::class, 'productCategory']);
Route::match(['get', 'post'], '/category/slug', [PageController::class, 'detail']);

然后在控制器中

public function productCategory($category)

    dd($categoty); // prints tshirt when you hit the url /tshirt


public function detail($category, $detail)

    dd($categoty, $detail); // prints tshirt and nameoftshirt when you hit the url /tshirt/nameoftshirt

【讨论】:

所以基本上 laravel 无法在没有类别动态的情况下捕获第一个 url?感谢您的帮助 laravel 可以捕获 url 参数。不是静态路径。您可以使用其他 php 函数来获取 url 段。如果答案有帮助,请将其标记为已接受。

以上是关于Laravel 8 上的 ArgumentCountError的主要内容,如果未能解决你的问题,请参考以下文章

App Engine 上的 Laravel 8:“请提供有效的缓存路径”

Laravel 8 上的 HTTP RESTful API 功能测试

调用字符串上的成员函数 addEagerConstraints() - Laravel 8

枚举列laravel 8上的多项选择

CSS 不会在 XAMPP 上的 Laravel 8 + Jetstream 中加载

尝试在 Laravel 8 中读取 null 上的属性“名称”