升级到laravel 5.3 - Route :: prefix

时间:2017-01-26 20:24:28

标签: laravel upgrade laravel-5.3

从5.1升级到5.3,遵循所有说明...... https://laravel.com/docs/5.3/upgrade#upgrade-5.3.0

现在我要

BadMethodCallException in Macroable.php line 74:
Method prefix does not exist.
in Macroable.php line 74
at Router->__call('prefix', array('api')) in Facade.php line 237
at Facade::__callStatic('prefix', array('api')) in RouteServiceProvider.php line 58
at RouteServiceProvider->mapApiRoutes() in RouteServiceProvider.php line 32
at RouteServiceProvider->map()
at call_user_func_array(array(object(RouteServiceProvider), 'map'), array()) in Container.php line 508
at Container->call(array(object(RouteServiceProvider), 'map')) in RouteServiceProvider.php line 69
at RouteServiceProvider->loadRoutes() in RouteServiceProvider.php line 30
at RouteServiceProvider->boot() in RouteServiceProvider.php line 23
at RouteServiceProvider->boot()
at call_user_func_array(array(object(RouteServiceProvider), 'boot'), array()) in Container.php line 508
at Container->call(array(object(RouteServiceProvider), 'boot')) in Application.php line 769
at Application->bootProvider(object(RouteServiceProvider)) in Application.php line 752
at Application->Illuminate\Foundation\{closure}(object(RouteServiceProvider), '16')
at array_walk(array(object(EventServiceProvider), object(RoutingServiceProvider), object(AuthServiceProvider), object(CookieServiceProvider), object(DatabaseServiceProvider), object(EncryptionServiceProvider), object(FilesystemServiceProvider), object(FoundationServiceProvider), object(PaginationServiceProvider), object(SessionServiceProvider), object(ViewServiceProvider), object(NotificationServiceProvider), object(AppServiceProvider), object(AuthServiceProvider), object(ConfigServiceProvider), object(EventServiceProvider), object(RouteServiceProvider), object(DatabaseServiceProvider), object(BraintreeServiceProvider), object(BroadcastServiceProvider), object(FlashServiceProvider), object(ExcelServiceProvider), object(CashierServiceProvider), object(EntrustServiceProvider), object(AnalyticsServiceProvider), object(JWTAuthServiceProvider), object(ApidocsServiceProvider), object(ServiceProvider), object(GeoIPServiceProvider), object(PdfServiceProvider), object(LaravelPhoneServiceProvider)), object(Closure)) in Application.php line 753
at Application->boot() in BootProviders.php line 17
at BootProviders->bootstrap(object(Application)) in Application.php line 203
at Application->bootstrapWith(array('Illuminate\Foundation\Bootstrap\DetectEnvironment', 'Illuminate\Foundation\Bootstrap\LoadConfiguration', 'Illuminate\Foundation\Bootstrap\ConfigureLogging', 'Illuminate\Foundation\Bootstrap\HandleExceptions', 'Illuminate\Foundation\Bootstrap\RegisterFacades', 'Illuminate\Foundation\Bootstrap\RegisterProviders', 'Illuminate\Foundation\Bootstrap\BootProviders')) in Kernel.php line 254
at Kernel->bootstrap() in Kernel.php line 145
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 117
at Kernel->handle(object(Request)) in index.php line 52
  • 运行composer dump-autoload
  • 运行作曲家更新(只是为了获得最新和最好的)
  • 我还能做什么?

RouteServiceProvider的代码是laravel的精确副本。 不知道为什么不加载!该方法无法识别,但我可以在Router类中看到它。

{     " name":" laravel / laravel",     "描述":" Laravel框架。",     "关键字":["框架"," laravel"],     "许可证":" MIT",     "输入":"项目",     "要求":{         " laravel / framework":" 5.3。",         " laravelcollective / html":" ~5.0",         " laracasts / flash":" ~1.3",         " maatwebsite / excel":" ~2.1",         " guzzlehttp / guzzle":" ~6.2",         " doctrine / dbal":" ~2.5",         " laravel / cashier":" ~7.0",         " league / flysystem-aws-s3-v3":" ~1.0",         " zizaco /委托":" 1.7.0",         " barryvdh / laravel-ide-helper":" ^ 2.2",         " blueimp / jquery-file-upload":" ^ 9.14",         " ipunkt / laravel-analytics":" ^ 1.3",         " braintree / braintree_php":" ^ 3.21",         " tymon / jwt-auth":" 0.5。",         " f2m2 / apidocs":" ~2.0",         " barryvdh / laravel-cors":" 0.8。*",         " pulkitjalan / geoip":" ~2.4",         " aws / aws-sdk-php-laravel":" ^ 3.1",         " vsmoraes / laravel-pdf":" ^ 1.0",         " propaganistas / laravel-phone":" ^ 2.8",         " activecampaign / api-php":" ~2.0"     },     " require-dev":{         " phpunit / phpunit":" ~4.0",         " phpspec / phpspec":" ~2.1",         " ozankurt / repoist":" ^ 1.0",         " symfony / dom-crawler":" ~3.1",         " symfony / css-selector":" ~3.1"     },     " autoload":{         " classmap":[             "数据库"         ]         " psr-4":{             " APP \":" app /"         }     },     " autoload-dev":{         " classmap":[             "测试/ TestCase.php"         ]     },     "脚本":{         " post-root-package-install":[             " php -r \" file_exists(' .env')||复制(' .env.example',' .env'); \""         ]         " post-create-project-cmd":[             " php artisan key:generate"         ]         " post-install-cmd":[             "照亮\基金会\ ComposerScripts ::安装后&#34 ;,             " php artisan optimize"         ]         " post-update-cmd":[             "照亮\基金会\ ComposerScripts :: postUpdate&#34 ;,             " php artisan optimize"         ]     },     " config":{         " preferred-install":" dist"     } }

RouteServiceProvider

<?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->mapApiRoutes();
        $this->mapWebRoutes();
        //
    }
    /**
     * Define the "web" routes for the application.
     *
     * These routes all receive session state, CSRF protection, etc.
     *
     * @return void
     */
    protected function mapWebRoutes()
    {
        Route::middleware('web')
            ->namespace($this->namespace)
            ->group(base_path('routes/web.php'));
    }
    /**
     * Define the "api" routes for the application.
     *
     * These routes are typically stateless.
     *
     * @return void
     */
    protected function mapApiRoutes()
    {
        Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/api.php'));
    }
}

另一项测试 我交换了前缀和中间件调用并得到了这个错误......

SWAPPED ORDER

protected function mapApiRoutes()
{
    Route::middleware('api')->prefix('api')
        ->namespace($this->namespace)
        ->group(base_path('routes/api.php'));
}

ERROR

FatalThrowableError in Router.php line 859:
Type error: Too few arguments to function Illuminate\Routing\Router::middleware(), 1 passed in /var/www/vhosts/camp-native/API-v.2-master/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 237 and exactly 2 expected
in Router.php line 859
at Router->middleware('api') in Facade.php line 237
at Facade::__callStatic('middleware', array('api')) in RouteServiceProvider.php line 58
at RouteServiceProvider->mapApiRoutes() in RouteServiceProvider.php line 32
at RouteServiceProvider->map()
at call_user_func_array(array(object(RouteServiceProvider), 'map'), array()) in Container.php line 508
at Container->call(array(object(RouteServiceProvider), 'map')) in RouteServiceProvider.php line 69
at RouteServiceProvider->loadRoutes() in RouteServiceProvider.php line 30
at RouteServiceProvider->boot() in RouteServiceProvider.php line 23
at RouteServiceProvider->boot()
at call_user_func_array(array(object(RouteServiceProvider), 'boot'), array()) in Container.php line 508
at Container->call(array(object(RouteServiceProvider), 'boot')) in Application.php line 769
at Application->bootProvider(object(RouteServiceProvider)) in Application.php line 752
at Application->Illuminate\Foundation\{closure}(object(RouteServiceProvider), '16')
at array_walk(array(object(EventServiceProvider), object(RoutingServiceProvider), object(AuthServiceProvider), object(CookieServiceProvider), object(DatabaseServiceProvider), object(EncryptionServiceProvider), object(FilesystemServiceProvider), object(FoundationServiceProvider), object(PaginationServiceProvider), object(SessionServiceProvider), object(ViewServiceProvider), object(NotificationServiceProvider), object(AppServiceProvider), object(AuthServiceProvider), object(ConfigServiceProvider), object(EventServiceProvider), object(RouteServiceProvider), object(DatabaseServiceProvider), object(BraintreeServiceProvider), object(BroadcastServiceProvider), object(FlashServiceProvider), object(ExcelServiceProvider), object(CashierServiceProvider), object(EntrustServiceProvider), object(AnalyticsServiceProvider), object(JWTAuthServiceProvider), object(ApidocsServiceProvider), object(ServiceProvider), object(GeoIPServiceProvider), object(PdfServiceProvider), object(LaravelPhoneServiceProvider)), object(Closure)) in Application.php line 753
at Application->boot() in BootProviders.php line 17
at BootProviders->bootstrap(object(Application)) in Application.php line 203
at Application->bootstrapWith(array('Illuminate\Foundation\Bootstrap\DetectEnvironment', 'Illuminate\Foundation\Bootstrap\LoadConfiguration', 'Illuminate\Foundation\Bootstrap\ConfigureLogging', 'Illuminate\Foundation\Bootstrap\HandleExceptions', 'Illuminate\Foundation\Bootstrap\RegisterFacades', 'Illuminate\Foundation\Bootstrap\RegisterProviders', 'Illuminate\Foundation\Bootstrap\BootProviders')) in Kernel.php line 254
at Kernel->bootstrap() in Kernel.php line 145
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 117
at Kernel->handle(object(Request)) in index.php line 52

2 个答案:

答案 0 :(得分:2)

该链接是从5.2升级到5.3,因此您可能还需要检查5.1到5.2。

看起来可能是缺少的API路由和中间件。在该更新链接上,您已查找API和参考部分:

'api' => [
    'throttle:60,1',
     'bindings',
 ],

并且在app/Providors/RouteServiceProvider内寻找某些东西,如:

   protected function mapApiRoutes()
      {
          Route::prefix('api')
             ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
   }

希望这有帮助,可能是一个线索?

答案 1 :(得分:0)

最近,我在尝试将应用程序从5.2升级到5.3时遇到同样的问题。

经过反复梳理和解决错误后,我意识到RouteServiceProvider.php文件中存在错误。这是我解决问题的方法。

我替换了:

Route::prefix('api')
    ->middleware('api')
    ->namespace($this->namespace)
    ->group(base_path('routes/api.php'));

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

这对我来说很神奇。现在,我没有任何与中间件相关的错误。

顺便说一句::如果您的错误与mapWebRoutes有关,则需要使用web函数执行相同的操作。

希望这会有所帮助。