首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解决了!调用未定义的方法App\ Call :post() Laravel

解决了!调用未定义的方法App\ Call :post() Laravel
EN

Stack Overflow用户
提问于 2020-05-26 09:04:11
回答 3查看 7.2K关注 0票数 1

我想用laravel创建一些CMS项目,当用户试图单击类别时,应用程序将显示只显示用户单击的类别的帖子。当用户单击这些类别时,应用程序会说error Bad方法调用。我该怎么办?任何帮助都将不胜感激。

这是web.php的代码

代码语言:javascript
复制
<?php

use App\Http\Controllers\Blog\PostsController;
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('/', 'WelcomeController@index')->name('welcome');
Route::get('blog/posts/{post}', [PostsController::class, 'show'])->name('blog.show');
Route::get('blog/categories/{category}', [PostsController::class, 'category'])->name('blog.category');
Route::get('blog/tags/{tag}', [PostsController::class, 'tag'])->name('blog.tag');

Auth::routes();

Route::middleware(['auth'])->group(function () {
    Route::get('/home', 'HomeController@index')->name('home');
    Route::resource('categories', 'CategoriesController');
    Route::resource('posts','PostsController');
    Route::resource('tags','TagsController');
    Route::get('trashed-posts','PostsController@trashed')->name('trashed-posts.index');
    Route::put('restore-post/{post}', 'PostsController@restore')->name('restore-posts');
});

Route::middleware(['auth', 'admin'])->group(function () {
    Route::get('users/profile', 'UserController@edit')->name('users.edit-profile');
    Route::put('users/profile', 'UserController@update')->name('users.update-profile');
    Route::get('users','UserController@index')->name('users.index');
    Route::post('users/{user}/make-admin', 'UserController@makeAdmin')->name('users.make-admin');
});

这是PostsController.php的代码

代码语言:javascript
复制
<?php

namespace App\Http\Controllers\Blog;

use App\Http\Controllers\Controller;
use App\Post;
use Illuminate\Http\Request;
use App\Tag;
use App\Category;


class PostsController extends Controller
{
    public function show(Post $post) {
        return view('blog.show')->with('post', $post);
    }

    public function category(Category $category) {
        return view('blog.category')
        ->with('category', $category)
        ->with('posts', $category->posts()->simplePaginate())
        ->with('categories', Category::all())
        ->with('tags', Tag::all());
    }

    public function tag(Tag $tag) {
        return view('blog.tag')
        ->with('tag', $tag)
        ->with('posts', $tag->posts()->simplePaginate(3));
    }
}

这是App\Category.php的代码

代码语言:javascript
复制
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
   protected $fillable = ['name'];

   public function post() {
      return $this->hasMany(Post::class);
   }
}

这是category.blade.php的代码

代码语言:javascript
复制
@extends('layouts.blog')


@section('title')
Category {{ $category->name }}
@endsection

@section('header')
<header class="header text-center text-white" style="background-image: linear-gradient(-225deg, #5D9FFF 0%, #B8DCFF 48%, #6BBBFF 100%);">
    <div class="container">

      <div class="row">
        <div class="col-md-8 mx-auto">

          <h1>{{ $category->name }}</h1>
          <p class="lead-2 opacity-90 mt-6">Read and get updated on how we progress</p>

        </div>
      </div>

    </div>
  </header><!-- /.header -->
@endsection

@section('content')
  <main class="main-content">
    <div class="section bg-gray">
      <div class="container">
        <div class="row">


          <div class="col-md-8 col-xl-9">
            <div class="row gap-y">

              @forelse($posts as $post)
                  <div class="col-md-6">
                      <div class="card border hover-shadow-6 mb-6 d-block">
                        <a href="{{ route('blog.show',$post->id) }}"><img class="card-img-top" src="{{ asset($post->image) }}" alt="Card image cap"></a>
                        <div class="p-6 text-center">
                          <p>
                              <a class="small-5 text-lighter text-uppercase ls-2 fw-400" href="#"></a>
                                  {{ $post->category->name }}
                              </p>
                          <h5 class="mb-0">
                              <a class="text-dark" href="{{ route('blog.show',$post->id) }}">
                                  {{ $post->title }}
                              </a>
                          </h5>
                        </div>
                      </div>
                    </div>
                    @empty
                    <p class="text-center">
                    No Results found for query   <strong>{{ request()->query('search') }} </strong>
                </p>
                    @endforelse
            </div>


            {{-- <nav class="flexbox mt-30">
              <a class="btn btn-white disabled"><i class="ti-arrow-left fs-9 mr-4"></i> Newer</a>
              <a class="btn btn-white" href="#">Older <i class="ti-arrow-right fs-9 ml-4"></i></a>
            </nav> --}}
            {{ $posts->appends(['search' => request()->query('search') ])->links() }}

          </div>

          @include('partials.sidebar')

        </div>
      </div>
    </div>
  </main>
@endsection

如果你们没看到我没有出现的文件,那就问问吧。如果你们看到任何令人困惑的问题,我可以使用teamviewer。任何帮助都将不胜感激。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-26 09:06:50

错误告诉您您没有posts。的确如此。您所拥有的是post()类上的Category方法,很明显,在这一行中可以看到:

代码语言:javascript
复制
public function post() {

您应该将此->with('posts', $category->posts()->simplePaginate())更改为:

代码语言:javascript
复制
public function category(Category $category) {
    return view('blog.category')
    ->with('category', $category)
    ->with('posts', $category->post()->simplePaginate())
    ->with('categories', Category::all())
    ->with('tags', Tag::all());
}
票数 2
EN

Stack Overflow用户

发布于 2020-05-26 09:06:29

在您的模型中,您定义了一个post关系,而您使用的是一个posts关系,它们不是同一个关系。您应该将post替换为posts,因为这是一个非常多的关系。

票数 1
EN

Stack Overflow用户

发布于 2020-05-26 09:06:55

你们的关系是post,你们有多个->with('posts', $category->posts()->simplePaginate())。你能把这些换成->with('post')然后再试一次吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62018391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档