laravel приложение работает локально на приусадебном участке, но на производстве выброшен отсутствующий класс - PullRequest
0 голосов
/ 19 апреля 2020

Я использую Laravel Homestead в качестве среды разработки, я разработал приложение laravel, и все отлично работает, и я могу правильно просматривать приложение, но при развертывании его на VPS с тем же программным обеспечением (php, mysql -server, redis ,,,) как Laravel Homestead, но я получаю FatalThrowableError : Class 'App\Http\Controllers\Admin\DatasourceCrudController' not found Я потратил много часов на изучение этой проблемы, но не повезло.

Я обнаружил, что имя класса DataSourceCrudController.php с заглавной буквы S в DataSource bu ошибка: DatasourceCrudController.

Я пытался:

composer dump-autoload
php artisan cache:clear
php artisan config:clear
php artisan route:clear

, но для каждого класса я получаю исключение, не найденное.

Код локально и на рабочем сервере, и среды одинаковы UBUNTU 18.04

Пожалуйста, помогите мне решить эту проблему.

Спасибо,


ОБНОВЛЕНИЕ 1:

web.php маршруты:

<?php

/*
|--------------------------------------------------------------------------
| 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('/', "PageController@index")->name("index");

Auth::routes();

Route::middleware('auth:web')->get('/home', 'HomeController@index')->name('home');

Route::get('/import', 'ImportController@import')->name('import');
Route::post('/parse', 'ImportController@parse')->name('parse');
Route::post('/process', 'ImportController@process')->name('process');

Route::post('/active-country/{activeCountry}', 'PageController@selectActiveCountry')->name("selectActiveCountry");

Route::prefix('graphs')->middleware('auth:web')->group(function(){
    Route::get('/price-analysis', 'DyGraphController@create')->name("getPriceAnalysisForm");
    Route::post('/price-analysis', 'DyGraphController@store')->name("postPriceAnalysisForm");
    Route::get('/dygraph', 'DyGraphController@getGraphs')->name("dygraph");
    Route::get('/trends-analysis', 'TrendsAnalysisController@commoditiesTrendsPage')->name('trendAnalysisPage');
});

Route::prefix('analysis')->middleware('auth:web')->group(function (){
    Route::get('/your-analysis', 'CustomAnalysisController@create')->name('yourAnalysisPage');
});

Файл класса: DataSourceCrudController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Admin\Operations\UploadOperation;
use App\Http\Requests\DatasourceRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

/**
 * Class DatasourceCrudController
 * @package App\Http\Controllers\Admin
 * @property-read CrudPanel $crud
 */
class DataSourceCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
    use UploadOperation;

    public function setup()
    {
        $this->crud->setModel('App\DataSource');
        $this->crud->setRoute(config('backpack.base.route_prefix').'/datasource');
        $this->crud->setEntityNameStrings('data source', 'data sources');
        $this->crud->enableExportButtons();
    }

    protected function setupListOperation()
    {
        $this->crud->addColumn([
            'name' => 'row_number', 'type' => 'row_number', 'label' => '#', 'orderable' => false
        ])->makeFirstColumn();

        $this->crud->addColumn([
            'name' => 'file_name',
            'type' => 'text',
            'label' => 'File Name'
        ]);

        $this->crud->addColumn([
            'label' => 'Country',
            'type' => 'text',
            'name' => 'country_name'
        ]);

        $this->crud->addColumn([
            'name' => "rows",
            'label' => "Rows",
            'type' => "number"
        ]);

        $this->crud->addColumn([
            'name' => 'imported',
            'key' => 'check',
            'label' => 'Imported',
            'type' => 'check',
        ]);

        $this->crud->addColumn([
            'name' => 'created_at',
            'label' => 'Date',
            'type' => 'datetime'
        ]);
    }

    protected function setupUploadOperation()
    {
        $this->crud->setValidation(DatasourceRequest::class);
        /*
         * Get Active Countries Ajax /api/active-countries
         * */
        /*$this->crud->addField([
            'label' => 'Active Country',
            'type' => 'select2_from_ajax',
            'name' => 'active_country_id',
            'entity' => 'activeCountry',
            'attribute' => 'name',
            'model' => 'App\Country',
            'data_source' => url('api/active-countries'),
            'placeholder' => 'Select a Country',
            'minimum_input_length' => 3,
        ]);*/

        $this->crud->addField(
            [  // Select2
                'label' => 'Country',
                'type' => 'select2',
                'name' => 'active_country_id', // to display active countries
                'entity' => 'activeCountry',
                'attribute' => 'name',
                'model' => 'App\ActiveCountry',
                'options' => (function ($query) {
                    return $query->orderBy('id', 'DESC')->get();
                }),
            ]
        );

        $this->crud->addField(
            [
                'label' => "Data Source File",
                'name' => "import_file",
                'type' => 'upload',
                'upload' => true,
            ]);

        $this->crud->addField(
            [
                'name' => 'header',
                'label' => 'Excel file contains header',
                'type' => 'checkbox',
            ]);
    }
}

Обновление 2:

Я с помощью панели администратора рюкзака, и этот контроллер используется для создания операции crud и маршрутов администратора в custom.php:

<?php

// --------------------------
// Custom Backpack Routes
// --------------------------
// This route file is loaded automatically by Backpack\Base.
// Routes you generate using Backpack\Generators will be placed here.

Route::group([
    'prefix'     => config('backpack.base.route_prefix', 'admin'),
    'middleware' => ['web', config('backpack.base.middleware_key', 'admin')],
    'namespace'  => 'App\Http\Controllers\Admin',
], function () { // custom admin routes
    Route::crud('country', 'CountryCrudController');
    Route::crud('currency', 'CurrencyCrudController');
    Route::crud('commodity', 'CommodityCrudController');
    Route::crud('market', 'MarketCrudController');
    Route::crud('period', 'PeriodCrudController');
    Route::crud('measure_unit', 'MeasureUnitCrudController');
    Route::crud('datasource', 'DataSourceCrudController');
    Route::crud('commodity_rate', 'CommodityRateCrudController');
    Route::crud('activecountry', 'ActiveCountryCrudController');
    Route::crud('availability', 'AvailabilityCrudController');
    Route::crud('pricetype', 'PricetypeCrudController');
}); // this should be the absolute last line of this file

1 Ответ

0 голосов
/ 19 апреля 2020

Если ваша серверная среда Ubuntu, она чувствительна к регистру файлов. Таким образом, DatasourceCrudController - это не то же самое, что DatasourcecrudController. Убедитесь, что на ваши контроллеры ссылаются с их правильными именами и регистром, и убедитесь, что имя файла соответствует имени класса, с регистром.

, если ваше имя файла DataSourceCrudController.php, убедитесь, что имя класса DataSourceCrudController и убедитесь, что в вашем маршруте указано DataSourceCrudController web.php file

...