2016-10-24 3 views
1

Я новичок в Laravel, и это мой первый раз, когда я создал контроллер. Я также искал часы для подобных проблем, но не смог найти решение, которое будет работать для меня.Laravel 5.3 Route :: get() возвращает ошибку Класс [имя_файла] не существует

Когда я не с помощью контроллера все же, я был в состоянии отобразить страницу с помощью этого кода приложения/Поставщики/RouteServiceProvider.php:

Route::get('/', function(){ 
     if(View::exists('pages.index')) 
      return view('pages.index'); 
     else 
      return view('errors.404',['xp'=>'pages/index']); 
    }); 

Проблема началась, когда я создал контроллер и подставив выше блок кода в этом:

Route::get('/', '[email protected]'); 

После использования выше код, я получил эту ошибку:

ReflectionException in Container.php line 749: Class SiteController does not exist

Вот мои полные коды:

внутри приложение/Провайдеры/RouteServiceProvider.php:

<?php 
namespace App\Providers; 
use Illuminate\Support\Facades\Route; 
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; 
use Illuminate\Support\Facades\View; 

class RouteServiceProvider extends ServiceProvider{ 
    protected $namespace = 'App\Http\Controllers'; 
    public function boot(){ 
     parent::boot(); 
    } 

    public function map(){ 
     $this->mapApiRoutes(); 
     $this->mapWebRoutes(); 
    } 

    protected function mapWebRoutes(){ 
     Route::group([ 
      'middleware' => 'web', 
      'namespace' => $this->namespace, 
     ], function ($router) { 
      require base_path('routes/web.php'); 
     }); 

     /*site view*/ 
     Route::get('/', '[email protected]'); 
    } 
    protected function mapApiRoutes(){ 
     Route::group([ 
      'middleware' => 'api', 
      'namespace' => $this->namespace, 
      'prefix' => 'api', 
     ], function ($router) { 
      require base_path('routes/api.php'); 
     }); 
    } 
} 

внутри приложения/Http/Контроллеры/SiteController.php

<?php 
namespace App\Http\Controllers; 
use Illuminate\Http\Request; 
use App\Http\Requests; 

class SiteController extends Controller{ 
    public function index(){ 
     $this->check_page(['pages.index']); 
    } 

    public function check_page($page){ 
     $xp = str_replace('.','/',$page); 
     if(View::exists($page)) 
      return view($page); 
     else 
      return view('errors.404',$xp); 
    } 
} 

И, может быть, я просто тупой (отлично), но я ничего не могу найти от этого «греческого» Laravel Documentation, который мне очень помог.

Я надеюсь, что кто-то там столкнулся с этим раньше и может поделиться своим решением. Большое спасибо.

+0

Поместите 'Route :: get ('/', 'SiteController @ index');' inside routes/web.php и посмотрите? – SteD

+0

Вы сделали запись для маршрута в маршрутах/web.php? –

+0

Я только что сделал это, а также добавил использование Illuminate \ Support \ Facades \ View; поверх моего SiteController.php.Но теперь у меня возникла новая ошибка: ОшибкаException в строке FileViewFinder.php 71: Недопустимый тип смещения в isset или пустой – ITWitch

ответ

1

первый запуск команды composer dump-autoload

Если его не работает, чем следовать эти шаги:

шаг 1: создать маршрут внутри routes\web.php Route::get('/', '[email protected]');

шаг 2: создать контроллер с помощью cmd например php artisan make:controller SiteController

внутри: app/Провайдеры/RouteServiceProvider.php должно быть так:

<?php 

namespace App\Providers; 

use Illuminate\Support\Facades\Route; 
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; 

class RouteServiceProvider extends ServiceProvider 
{ 
    /** 
    * This namespace is applied to your controller routes. 
    * 
    * In addition, it is set as the URL generator's root namespace. 
    * 
    * @var string 
    */ 
    protected $namespace = 'App\Http\Controllers'; 

    /** 
    * Define your route model bindings, pattern filters, etc. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // 

     parent::boot(); 
    } 

    /** 
    * Define the routes for the application. 
    * 
    * @return void 
    */ 
    public function map() 
    { 
     $this->mapWebRoutes(); 

     $this->mapApiRoutes(); 

     // 
    } 

    /** 
    * Define the "web" routes for the application. 
    * 
    * These routes all receive session state, CSRF protection, etc. 
    * 
    * @return void 
    */ 
    protected function mapWebRoutes() 
    { 
     Route::group([ 
      'middleware' => 'web', 
      'namespace' => $this->namespace, 
     ], function ($router) { 
      require base_path('routes/web.php'); 
     }); 
    } 

    /** 
    * Define the "api" routes for the application. 
    * 
    * These routes are typically stateless. 
    * 
    * @return void 
    */ 
    protected function mapApiRoutes() 
    { 
     Route::group([ 
      'middleware' => ['api', 'auth:api'], 
      'namespace' => $this->namespace, 
      'prefix' => 'api', 
     ], function ($router) { 
      require base_path('routes/api.php'); 
     }); 
    } 
} 

Внутри: приложение/Http/Контроллеры/SiteController.php

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 

class SiteController extends Controller 
{ 
    public function index() { 
     return view('pages.index'); 
    } 
} 

Создать вид страницы внутри: resources/views/pages/index.blade.php

Запуск сервера с помощью ЦМД php artisan serve

Надейтесь, что это поможет вам!

+0

'composer dump-autoload' ничего не делал, но в соответствии с вашими инструкциями мне удалось выяснить корень ошибки. В моем ** SiteController-> index ** я изменил строку '$ this-> check_page (['pages.index']);' в 'return $ this-> check_page (['pages.index']); '. Недопустимое слово 'return' решило все. Большое спасибо за ваше руководство. – ITWitch

+0

** Боковое примечание: ** 'php artisan serve' дает мне ** [ErrorException] chdir(): Нет такого файла или каталога (errno 2) **. На данный момент это не очень важно, но если у вас есть идея, почему я получаю это, это также будет высоко оценено. – ITWitch

+1

@FlameDenise вы должны запустить команду в папке dir вашего проекта. Например: ваш проект dir: 'c: \ xampp \ htdocs \ laravel5.3' внутри' laravel5.3' папки вы запускаете cmd: 'php artisan serve ' –

Смежные вопросы