Почему не найден класс "user"? - PullRequest
       0

Почему не найден класс "user"?

0 голосов
/ 13 сентября 2018

Я создаю веб-приложение PHP с помощью Laravel и пытаюсь передать имя и адрес электронной почты из формы в мою базу данных, но она отображает эту ошибку:

Неустранимая ошибка: Uncaught Error:Класс 'user' не найден в C: \ xampp \ htdocs \ MVC \ app \ controller \ home.php: 20 Трассировка стека: # 0 C: \ xampp \ htdocs \ MVC \ app \ core \ app.php (43):home-> create ('hala', 'hala @ yahoo') # 1 C: \ xampp \ htdocs \ MVC \ public \ index.php (4): app -> __ construct () # 2 {main}, брошенный в C:\ xampp \ htdocs \ MVC \ app \ controller \ home.php в строке 20

Это код, который я использую для домашней страницы:

class home extends controller
{    
    public function index($name = '')
    {
        $this->view('home/index', ['name'=>$user->name]);
    }

    public function create($username = '', $email = '')
    {
        user::create([
            'username' => $username,
            'email'=> $email
        ]);
    }
}

имодель:

use Illuminate\Database\Eloquent\Model as Eloquent;
class user extends Eloquent 
{
    public $name;
    protected $fillable = ['username','email'];
}

Что я делаю не так и как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Если вы используете illuminate/database, скорее всего, вы используете композитор. Почему бы не добавить правило автоматической загрузки PSR-4 и соответствующим образом структурировать свой код. Например. composer.json может выглядеть так:

{
    "name": "acme/acme",
    "description": "Acme is this and that",
    "type": "project",
    "require": {
        "php": "^7.2",
        "illuminate/database": "^5.7"
    },
    "autoload": {
      "psr-4": {
        "Acme\\": "src"
      }
    },
    "license": "proprietary"
}

Запуск composer install делает вас vendor/autoloader.php, и это единственный файл, который вам требуется. Вы помещаете свой собственный код в пространство имен Acme (или что бы вы ни выбрали). Например. Вы помещаете свою модель пользователя в src/Model/User.php и добавляете свое пространство имен:

<?php

namespace Acme\Model;

use Illuminate\Database\Eloquent\Model as Eloquent;

class User extends Eloquent 
{
    public $name;
    protected $fillable = ['username','email'];
}

Ваш основной файл может выглядеть следующим образом ..

<?php 
// entry point file

require_once('vendor/autoload.php');

use Acme\Model\User;
$user = new User();
// ...

Очевидно, вы бы сделали большую логику в некотором классе, так что это должно быть довольно коротким.

Это может показаться очевидным людям, работающим над недавними проектами, но я видел слишком много проектов, в которых все еще есть статический файл, включая все классы, как мы делали в прежние времена. Переместите свои проекты в 2010-е сейчас!

0 голосов
/ 13 сентября 2018

В коде вашего контроллера вам необходимо включить класс user:

require_once("user.class.php"); /* or whatever the file is named */

Если это делается автоматически, а класс находится в другом пространстве имен, вам необходимо объявить свое намерение использовать егов контроллере:

use \my\namespace\user;

Или просто используйте полное имя класса в своем коде:

\my\namespace\user::create();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...