Класс 'App \ Http \ Controllers \ App \ Model' не найден - PullRequest
0 голосов
/ 04 октября 2019

У меня есть приложение CRUD, все работает, кроме обновления тегов

Вот функция update в моем контроллере

namespace App\Http\Controllers;

use App\Tag;
use App\PageList;
use App\PageListTag;
use Illuminate\Http\Request;

public function update(Request $request, $id)
{
    $pages = PageList::find($id);
    $pages->pagetitle =  $request->get('pagetitle');
    $pages->articlelist = $request->get('articlelist');
    $pages->status = $request->get('status');

    $pages->save();

    $pages->tags()->saveMany([
        new App\Tag(),
        new App\Tag(),
    ]);

    return redirect('/pages')->with('success', 'pages updated!');
}

Вот модель Tag

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    protected $fillable = ['page_list_id', 'page_list_tag_id'];

    protected $with = ['tag'];

    public function tag()
    {
        return $this->belongsTo('App\PageListTag', 'page_list_tag_id', 'id');
    }
}

Когда я запускаю свое приложение, я получаю следующую ошибку

Класс 'App \ Http \ Controllers \ App \ Tag' не найден

Что такоеЯ делаю неправильно в моем коде?

Ответы [ 2 ]

3 голосов
/ 04 октября 2019

Вы неправильно решаете пространства имен моделей. Пожалуйста, взгляните на официальную PHP документацию

. В своем коде вы разрешаете класс Tag следующим образом

use App\Tag; // <-- This is right

Но в вашем методе вы 'повторный вызов

$pages->tags()->saveMany([
    new App\Tag(), // <-- And this is wrong!
    new App\Tag(),
]);

Вам просто нужно вызвать new Tag(), поскольку use в верхней части вашего файла уже содержит класс.

В противном случае PHP попытается разрешить классиз текущего пространства имен. Вот почему он выдает

Class 'App\Http\Controllers\App\Tag' not found

Чтобы быть правым, вы должны были добавить \ перед App\Tag, чтобы PHP разрешил класс из корня. В этом случае оператор use будет бесполезным

2 голосов
/ 04 октября 2019

Ваше пространство имен App\Http\Controllers, поэтому, когда вы создаете тег с синтаксисом new App\Tag(), он действительно переводится в App\Http\Controllers\App\Tag.

Так что просто замените ваши инструкции new App\Tag() на new Tag().

В качестве альтернативы вы также можете использовать абсолютное обозначение:

new \App\Tag()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...