在laravel 5

时间:2017-04-30 02:10:11

标签: php laravel laravel-5.4

我创建了一个 StatusController 来更改状态。我有横幅模型和页面模型。

我的 StatusController 看起来像:

namespace App\Http\Controllers;

use App\Banner;
use App\Page;
use Illuminate\Http\Request;

class StatusController extends Controller
{
    public function changeStatus($modelName, $id)
    {
        $model = $modelName::select('id','status')->whereId($id)->first();
        if($model->status == 1)
        {
            $model->status = 0;
        } else {
            $model->status = 1;
        }
        $model->update();
        $notification = [
            'message' => 'Updated Successfully!',
            'alert-type' => 'success'
        ];
        return back()->with($notification);

    }
}

我的 Web.php 是:

Route::post('status/{modelName}/{status}', 'StatusController@changeStatus')->name('status');

My View看起来像这样:

<form action="{{route('status',['model' => 'Page', 'status' => $page->id])}}" method="POST">
    {{csrf_field()}}
    <button title="Turn OFF" class="btn btn-xs btn-default">
    <i class="fa
     @if($page->status==1)
     status-active
     fa-toggle-on
     @else
     status-inactive
     fa-toggle-off
     @endif
     fa-2x"></i>
  </button>

点击状态图标后,我想更改状态。但是当我点击它。它显示错误。

FatalThrowableError in StatusController.php line 15:
Class 'Page' not found

当我尝试使用dd($ modelName)时,它会显示 Page 。出了什么问题

另外,请告诉我是否还有其他更好的想法来改变状态。对于我的所有模特。

1 个答案:

答案 0 :(得分:0)

即使你在顶部有use App\Page;语句,当你拥有的是类字符串时,php也会在类上调用函数。 Page'Page'不同。相反,您需要使用call_user_func

$model = call_user_func("App\\$modelName::select", ['id','status'])
    ->whereId($id)
    ->first();