【问题标题】:Laravel new controller method doesn't workLaravel 新的控制器方法不起作用
【发布时间】:2020-03-28 00:24:46
【问题描述】:

当我出于某种原因在控制器中创建新功能时,它不起作用。当我将此函数(getUnitsNotIn)中的代码设置为另一个函数(索引)时,该代码有效。 有谁知道为什么会这样?

我的 UnitsController.php 操作

public function index(){
    $items = Unit::select('parent_id')->where('parent_id','!=',NULL)->get()->toArray();
    return Units::whereNotIn('id',$items)->get();
}

public function getUnitsNotIn(){
    $items = Unit::select('parent_id')->where('parent_id','!=',NULL)->get()->toArray();
    return Units::whereNotIn('id',$items)->get();
}

我的 api.php

Route::apiResource('/units', 'UnitController');
Route::get('/units/notIn', 'UnitController@getUnitsNotIn');

简而言之,我制作的任何新控制器功能都将不起作用。我试图制作一个新的控制器,同样的事情发生了。 如何解决这个问题?

【问题讨论】:

  • UnitController@getUnits 与函数名称 getUnitsNotIn 不匹配。这是笔误吗?
  • 将自定义路由放在资源路由上方
  • 我的错,写这篇文章的时候,忘记放函数的真实名称了。
  • @dbudimir 你在API控制器中使用过show()函数吗?
  • @MrEvers 这样工作,谢谢

标签: laravel controller routes


【解决方案1】:

由于apiResource(),它无法正常工作。资源路由假定为/units/{id}。因此,当您调用 /units/notIn 路由时,假设 notInid 并且 Action 调用 show()

您需要使用不同的名称。

Route::get('/un/notIn', 'UnitController@getUnitsNotIn');

动词路径动作路线名称

GET/units/{id}showunits.show

【讨论】:

  • 是的,我在 Api 控制器中使用了 show() 函数,这对我有帮助,谢谢
  • @dbudimir 如果您使用了show() 方法,否则不需要更改路径。你只在apiResource()上方移动路线@
【解决方案2】:

改成

Route::get('/units-notIn', 'UnitController@getUnitsNotIn');

你定义了一个资源控制器,所以这里在units/notin中定义了一个id,所以
它称您的显示功能为默认值。

【讨论】:

  • 我在编辑帖子时的错误,注册了 Id 而不是 In,无论如何帮助了我您的评论,因为我看到我需要更改路径,因为我在 API Controller 中使用了显示功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 2016-12-07
相关资源
最近更新 更多