尝试在组件内调用控制器方法时出现 Laravel 错误
Posted
技术标签:
【中文标题】尝试在组件内调用控制器方法时出现 Laravel 错误【英文标题】:Laravel error when trying call controller method inside component 【发布时间】:2021-02-07 15:43:49 【问题描述】:所以基本上我有一个名为 Datatable 的组件。只是想为我的应用程序制作一个非常简单的表格组件。
当我调用视图时,错误似乎发生在组件文件的最后一步。
我的index.blade.php
我尝试使用这样的组件:
<x-datatable fn="users" />
为了明确,“fn”变量是我想在我的 Datatable 组件文件中调用的方法。
我的数据表组件文件如下所示:
<?php
namespace App\View\Components;
use Illuminate\View\Component;
class Datatable extends Component
/**
* The function/metho we want to get
* data from at the datatable controller
*
* @var String
*/
private $fn;
/**
* The controller used
* DatatableController
*
* @var Controller
*/
private $controller = \App\Http\Controllers\DatatableController::class;
/**
* This is all the data the table needs
*
* @var JSON
*/
public $data;
/**
* Create a new component instance.
*
* @return void
*/
public function __construct($fn)
$this->fn = $fn;
/**
* Get the data in JSON format from the DataTable controller
* based on the method given in the x-blade component
*
* @return void
*/
public function data()
$this->data = app()->call([$this->controller, $this->fn]);
/**
* Get the view / contents that represent the component.
*
* @return \Illuminate\Contracts\View\View|string
*/
public function render()
return view('components.datatable');
我得到的错误是:
TypeError Argument 2 passed to Illuminate\View\Factory::startComponent() must be of the type array, null given, called in D:\Laragon\www\table-test\storage\framework\views\c3b84706f301f85254f4ebb5d2f86ff3d680d02b.php on line 5 (View: D:\Laragon\www\table-test\resources\views\index.blade.php)
我试图清除视图缓存,但它只是给出了同样的错误。
在$this->data = app()->call([$this->controller, $this->fn]);
上使用dd()
时,它会向我显示应有的数据。
组件使用的视图是空的,但它存在,所以那里也不应该有问题。
是什么原因造成的?有人见过这样的吗?
【问题讨论】:
也许您在没有 fn 的情况下在其他地方调用组件?您可以直接检查缓存视图文件,并在错误行之前手动添加 dd()。 【参考方案1】:记住 php 使用驼峰式,这意味着类应该调用 DataTable 而你应该调用组件
<x-data-table fn="users"/>
【讨论】:
这不是错误。该类称为“数据表”。驼峰式没什么好说的。【参考方案2】:看起来“数据”是一个在使用组件时已经被后面的东西使用的方法。将方法重命名为 getData()
,现在可以使用。
【讨论】:
以上是关于尝试在组件内调用控制器方法时出现 Laravel 错误的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:尝试获取 PDF 时出现 DOMPDF 错误
Laravel,尝试通过 AJAX 向控制器传递数据时出现不匹配的令牌错误
Laravel 5:使用 Vue 安装自定义组件时出现错误“不在 npm 注册表中”。