【问题标题】:laravel 5 call method from controller in viewlaravel 5 从视图中的控制器调用方法
【发布时间】:2017-02-21 18:17:48
【问题描述】:
public function edit($id)
{
    $product = Product::find($id);
    \Gloudemans\Shoppingcart\Facades\Cart::add($id, $product->name, 1, $product->price);
}

当我从我的角度调用它时

<a href="{{\App\Http\Controllers\CartController::edit($productItem->id)}} " class="item_add">

我收到错误:

Non-static method App\Http\Controllers\CartController::edit() should not be called statically 

我该如何正确称呼它?

【问题讨论】:

  • 你能显示你为CartController@edit设置的Route吗?
  • Route::resource('cart','CartController');
  • 试试这个:&lt;a href="{{ app()-&gt;make(\App\Http\Controllers\CartController::class)-&gt;edit($productItem-&gt;id) }}"&gt;,虽然你为什么不把这个函数分配给一个路由并使用&lt;a href="{{ url("/route/to/function") }}"&gt;是我无法理解的......

标签: laravel methods view controller call


【解决方案1】:

你不必这样设置链接:

<a href="{{\App\Http\Controllers\CartController::edit($productItem->id)}} " 

但你必须这样设置:

url('cart/edit/' . $productItem->id)

【讨论】:

  • @RossWilson 但我还能怎么称呼它?
  • 我改了。所以你必须改变链接href ..我认为这不是使用Route调用的函数。
  • 你试试@Ronald吗?
  • 但问题是我不想转到另一个页面。例如,我按 -add to cart- 按钮,这是一个 href,我想留在页面中
  • @Ronald 如果您不希望页面重定向/刷新,则必须使用 ajax 之类的东西为您提交请求。无论哪种方式,您都需要提供正确的网址,而 Abdulkareem Mohammed 的回答为您提供了一种方法。
【解决方案2】:

您可以使用 action 辅助方法生成控制器操作的 URL:

<a href="{{ action('CartController@edit', [$productItem->id]) }}" class="item_add">

【讨论】:

    【解决方案3】:

    什么...大声笑...创建一条单独的路线...您尝试执行的所有其他方式都应该被深深地皱眉并中止(包括一些建议的答案/cmets),IMO。

    请注意,我还根据您使用的购物车库的命名约定将“编辑”更改为“添加”。

    在 routes.php 中添加(注意我命名了路由 - 最佳实践):

    Route::get('cart/add/{id}', ['as' => 'cart.add', 'uses' => 'CartController@add']);
    

    在视图中,这样称呼它:

    <a href="{{ route('cart.add', [$productItem]) }}">Add</a>
    

    在您的控制器中,按照以下方式执行操作:

    public function add($id)
    {
        $product = Product::find($id);
        Cart::add($id, $product->name, 1, $product->price);
    
        return redirect()->back();
    }
    

    PS: 有点困惑你为什么要这样称呼门面。在别名下的config/app.php 中添加:'Cart' =&gt; Gloudemans\Shoppingcart\Facades\Cart::class,

    然后在您的控制器中,在顶部注入 use Cart;。从那里, 只需在你的中使用Cart::add($id, $product-&gt;name, 1, $product-&gt;price); 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多