尽管我尝试清除,但Laravel似乎正在缓存API路由-想法?

时间:2019-09-11 20:29:58

标签: laravel

我有Laravel 5.3网站。

我今天添加了一些api路由,但是没有被调用。

实际上,我在NewRouteController下有一个Http/Api文件

但是路由返回404错误。永远无法到达控制器。

api.php中还有其他路由可以正常工作(例如,呼叫其中之一api/workingroute)。但是,如果我在api.php中注释掉他们的路线,它们仍然可以工作!

这是api.php文件:

Route::group(['prefix' => 'api'], function () { Route::resource('workingroute', 'Api\WorkingRouteController'); });
Route::group(['prefix' => 'api'], function () { Route::resource('newroute', 'Api\NewRouteController'); });

我认为问题是由route:list

揭示的
GET|HEAD  | api/api/newitems                      | newitems.index   | App\Http\Controllers\Api\New RouteController@index                | api            |
|        | POST      | api/api/newitems                      | newitems.store   | App\Http\Controllers\Api\New Route@store                | api            |
|        | GET|HEAD  | api/api/newitems/create               | newitems.create  | App\Http\Controllers\Api\New Route@create               | api            |
|        | GET|HEAD  | api/api/newitems/{newitem}      | newitems.show    | App\Http\Controllers\Api\New Route@show                 | api            |
|        | DELETE    | api/api/newitems/{newitem}      | newitems.destroy | App\Http\Controllers\Api\New Route@destroy              | api            |
|        | PUT|PATCH | api/api/newitems/{newitem}      | newitems.update  | App\Http\Controllers\Api\New Route@update               | api            |
|        | GET|HEAD  | api/api/newitems/{newitem}/edit | newitems.edit    | App\Http\Controllers\Api\New Route@edit                 | api  

不知道为什么要有api / api,因为我看不到任何以这种方式指示路线的地方,特别是因为我只是重复了工作api路线的所有内容。或者我想是因为我正在使用api.php,所以已经添加了前缀。

对于我的工作路线,我有一堆api/route形式的条目,但是它们也有api/api/route形式的重复条目

对于形式为api / api / item的路由,我们具有以下几种类型的线

api/api/item/{item} | item.show | App\Http\Controllers\Api\ItemController@show | api

对于形式为api / item的路由,这些类型的线如下:

 GET|HEAD  | api/item/{item}                         | lesson.show            | App\Http\Controllers\Api\ItemController@show                         | web,auth,admin 

我看了routes.php,它是Laravel 5.2的保留对象,它仍然在我的文件夹结构中,我们有以下几行:

// Api
Route::group(['middleware' => ['api', 'auth', 'admin']], function () {
    Route::group(array('prefix' => 'api'), function() {
        RegisterResourceRoute('item', 'Item');

我认为,当我从5.2升级到5.3时,我可能会崩溃。奇怪的是,由routes.php定义的路由是api / item形式的路由,它们可以正常工作。现在的问题是如何使路由恢复正常,以便所有api路由都为api / item形式并且都具有web,auth,admin

此外,对于它的价值(不确定缓存是否以某种方式影响我的问题),bootstrap / cache文件夹以及所有存储文件夹中都有.gitignore

这是cache.php:

return [

    /*
    |--------------------------------------------------------------------------
    | Default Cache Store
    |--------------------------------------------------------------------------
    |
    | This option controls the default cache connection that gets used while
    | using this caching library. This connection is used when another is
    | not explicitly specified when executing a given caching function.
    |
    */

    'default' => env('CACHE_DRIVER', 'file'),

    /*
    |--------------------------------------------------------------------------
    | Cache Stores
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the cache "stores" for your application as
    | well as their drivers. You may even define multiple stores for the
    | same cache driver to group types of items stored in your caches.
    |
    */

    'stores' => [

        'apc' => [
            'driver' => 'apc',
        ],

        'array' => [
            'driver' => 'array',
        ],

        'database' => [
            'driver' => 'database',
            'table'  => 'cache',
            'connection' => null,
        ],

        'file' => [
            'driver' => 'file',
            'path'   => storage_path('framework/cache'),
        ],

        'memcached' => [
            'driver'  => 'memcached',
            'servers' => [
                [
                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),
                    'port' => env('MEMCACHED_PORT', 11211),
                    'weight' => 100,
                ],
            ],
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Cache Key Prefix
    |--------------------------------------------------------------------------
    |
    | When utilizing a RAM based store such as APC or Memcached, there might
    | be other applications utilizing the same cache. So, we'll specify a
    | value to get prefixed to all our keys so we can avoid collisions.
    |
    */

    'prefix' => 'laravel',

];

想法?

谢谢, 布莱恩

1 个答案:

答案 0 :(得分:0)

我怀疑发生了几件事,但总之请检查您的bootstrap / cache文件夹。我希望在其中找到一个名为routes.php的文件,并且它可能已提交到您的存储库中,现在您已经将其拉低,或者甚至在使用工匠命令时自己意外创建了它。

通常,您会使用php artisan route:clear,但是如果您的命令行不起作用,那将不起作用,但是您应该可以删除它。

在这种情况下,它是使用php artisan route:cache创建的,但是建议仅在生产服务器上使用它(建议将其作为deploymnet脚本的一部分,也可以作为git hook)。

理想情况下,缓存文件夹中将存在一个.gitignore(如果您使用git)文件,以避免这种情况在不同的开发人员之间传输。

(编辑-这仅适用于Laravel的更高版本,但不适用于5.3-OP的版本。如果其他人有相同的问题,我将其保留在此处。)也可能有人(如果您在工作)团队中)故意完成了所有这些操作,只是没有传达更改。如果是这样,他们也有可能使用环境变量“ APP_ROUTES_CACHE”专门为路由缓存设置了另一条路径,在这种情况下,您必须去那里查看。

抱歉,这是如此复杂-但由于laravel的灵活性,可能有许多不同的方式发生。不过,请尝试全部尝试-这几乎肯定是一个缓存问题。