首页 > 解决方案 > BadMethodCallException 调用未定义的方法 App\Models\BatterFirst::index()

问题描述

我想添加一些数据,但是我的模型 BatterFirst.php 所在的位置出现 BadMethodCallException Call to undefined method App\Models\BatterFirst::index() 错误

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class BatterFirst extends Model
{
    use HasFactory;

    protected $fillable = [
        'name', 'runs', 'balls', 'sixs', 'fours'
    ];
}

这是我的控制器 BatterFirstController.php

<?php

namespace App\Http\Controllers;

use App\Models\BatterFirst;
use Illuminate\Http\Request;

class BatterFirstController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $data = BatterFirst::latest()->paginate(5);

        return view('BatterFirst.index',compact('data'))
            ->with('i', (request()->input('page', 1) - 1) * 5);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('BatterFirst.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'runs' => 'required',
            'balls' => 'required',
            'sixs' => 'required',
            'fours' => 'required',

        ]);

        BatterFirst::create($request->all());

        return redirect()->route('BatterFirst.index')
                        ->with('success','Batter created successfully.');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\BatterFirst  $batterFirst
     * @return \Illuminate\Http\Response
     */
    public function show(BatterFirst $batterFirst)
    {
        return view('BatterFirst.show',compact('BatterFirst'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\BatterFirst  $batterFirst
     * @return \Illuminate\Http\Response
     */
    public function edit(BatterFirst $batterFirst)
    {
        return view('BatterFirst.edit',compact('BatterFirst'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\BatterFirst  $batterFirst
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, BatterFirst $batterFirst)
    {
        $request->validate([
            'name' => 'required',
            'runs' => 'required',
            'balls' => 'required',
            'sixs' => 'required',
            'fours' => 'required',
        ]);

        $batterFirst->update($request->all());

        return redirect()->route('BatterFirst.index')
                        ->with('success','Batter updated successfully');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\BatterFirst  $batterFirst
     * @return \Illuminate\Http\Response
     */
    public function destroy(BatterFirst $batterFirst)
    {
        $batterFirst->delete();

        return redirect()->route('BatterFirst.index')
                        ->with('success','Batter deleted successfully');
    }
}

这是我的 web.php

<?php

use App\Models\BatterFirst;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::resource('BatterFirst', BatterFirst::class);

这是我的 BatterFrist/index.php


@extends('BatterFirst.layout')

@section('content')
    <div class="row" style="margin-top: 5rem;">
        <div class="col-lg-12 margin-tb">
            <div class="pull-left">
                <h2>Laravel 8 CRUD Example from scratch - laravelcode.com</h2>
            </div>
            <div class="pull-right">
                <a class="btn btn-success" href="{{ route('BatterFirst.create') }}"> Create New Post</a>
            </div>
        </div>
    </div>

    @if ($message = Session::get('success'))
        <div class="alert alert-success">
            <p>{{ $message }}</p>
        </div>
    @endif

    <table class="table table-bordered">
        <tr>
            <th>No</th>
            <th>Name</th>
            <th>Runs</th>
            <th>Balls</th>
            <th>Sixs</th>
            <th>Fours</th>
            <th>Strick Rate</th>
        </tr>
        @foreach ($data as $key => $value)
        <tr>
            <td>{{ ++$i }}</td>
            <td>{{ $value->name }}</td>
            <td>{{ $value->runs }}</td>
            <td>{{ $value->overs }}</td>
            <td>{{ $value->balls }}</td>
            <td>{{ $value->sixs }}</td>
            <td>{{ $value->fours }}</td>
            {{-- <td>{{ $value->runs/$value->balls*100 }}</td> --}}
            <td>@if ($value->runs > 0 and $value->runs ==0)
                    {{ $value->runs*100 }}
                @elseif ($value->balls>0 and $value->runs ==0)
                    {{ $value->balls*$value->runs }}
                @elseif ($value->balls==0 and $value->runs ==0)
                    {{ $value->balls *  $value->runs }}
                @elseif ($value->runs>0 and $value->balls>=0)
                    {{ $value->runs/$value->balls*100 }}
                @endif
            </td>
            <td>
                <form action="{{ route('BatterFirst.destroy',$value->id) }}" method="POST">
                    <a class="btn btn-info" href="{{ route('BatterFirst.show',$value->id) }}">Show</a>
                    <a class="btn btn-primary" href="{{ route('BatterFirst.edit',$value->id) }}">Edit</a>
                    @csrf
                    @method('DELETE')
                    <button type="submit" class="btn btn-danger">Delete</button>
                </form>
            </td>
        </tr>
        @endforeach
    </table>
    {!! $data->links() !!}
@endsection

这里有什么问题?谢谢你帮助我。如果您需要更详细的代码,请询问我,我会更新它。注意:我只是 laravel 的初学者

标签: laravel-8

解决方案


让我们调试您的代码,从请求进入应用程序的位置开始 - 在路由文件中:

Route::resource('BatterFirst', BatterFirst::class);

您有一条resource()由 处理的路线BatterFirst::class。但是那个班级在哪里?它必须映射到某些东西,如果您查看同一路由文件的顶部,我们会看到:

use App\Models\BatterFirst;

因此,请求yoursite.com/BatterFirst/将由模型index()中的方法处理BatterFirst。但是当然没有这样的方法。

退后一步,很明显您希望Controller处理您的路由,而不是您的Model。删除use路由文件顶部的那一行,并将其替换为:

use App\Http\Controllers\BatterFirstController;

并更新要由该控制器处理的路由:

Route::resource('BatterFirst', BatterFirstController::class);

推荐阅读