Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel似乎在缓存API路由,尽管我试图澄清这些想法?_Laravel - Fatal编程技术网

Laravel似乎在缓存API路由,尽管我试图澄清这些想法?

Laravel似乎在缓存API路由,尽管我试图澄清这些想法?,laravel,Laravel,我有拉威尔5.3网站 我今天添加了一些api路由,但没有调用它们 实际上,我在Http/Api下有一个NewRouteController文件 但是路由返回404错误。永远无法到达控制器 在api.php中还有其他一些路由可以正常工作(例如,调用其中一个api/workingroute)。但是如果我在api.php中注释掉它们的路径,它们仍然可以工作 以下是api.php文件: Route::group(['prefix' => 'api'], function () { Route::r

我有拉威尔5.3网站

我今天添加了一些api路由,但没有调用它们

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

但是路由返回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 
// Api
Route::group(['middleware' => ['api', 'auth', 'admin']], function () {
    Route::group(array('prefix' => 'api'), function() {
        RegisterResourceRoute('item', 'Item');
我查看了routes.php,它是Laravel 5.2的遗留版本,它仍然在我的文件夹结构中,我们有以下几行:

 GET|HEAD  | api/item/{item}                         | lesson.show            | App\Http\Controllers\Api\ItemController@show                         | web,auth,admin 
// 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',

];
想法

谢谢,
Brian

我怀疑发生了几件事,但简而言之,检查一下您的引导/缓存文件夹。我希望您能在其中找到一个名为routes.php的文件,该文件可能已经提交到您的repo中,现在您已经将其取下,或者您甚至在使用artisan命令时意外地创建了它

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

如果是这种情况,它是使用
php artisan-route:cache
创建的,但建议只在生产服务器上使用它(可能作为部署脚本的一部分,也可能作为git钩子使用)

理想情况下,缓存文件夹中应该有一个.gitignore(如果您使用的是git)文件,以避免在不同的开发人员之间传输此类内容

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


抱歉,这太复杂了,但由于拉雷维尔的灵活性,有许多不同的方式可以实现这一点。尽管如此,请尝试所有方法-这几乎肯定是一个缓存问题。

使用
php artisan route:list
查看注册的路由和url路径。里面没有显示吗?尝试运行
php artisan optimize
并重新运行route list命令,查看是否显示。route list的问题是它使用php CLI,而在我的MAC上,CLI是php 5.6,route:list生成语法错误。将升级CLI,但正试图触及问题的核心。我只是通过编辑api.php和创建controller来创建路由,而不是使用artisan命令,所以这可能会改变Laravel处理此类手动创建路由的方式。可能是存储文件夹中的某个内容,但那里没有routes.php。如果存在,您可以尝试手动清除或重命名/移动
bootstrap/cache
文件夹。您可以发布整个
api.php
route文件吗?您好,是的,api路由文件只有帖子中显示的行。我编辑并添加了控制器文件。您好,BrianHi,我的bootstrap/cache文件夹只有一个services.phpHi,所以我查看了cache.php并在我的帖子中发布。还发布了路线:有趣的列表的结果。。。事情似乎渐渐明朗了,只是不知道如何收拾残局!路线:顺便说一下,清除没有任何效果。也许我需要删除应用程序存储文件夹中的所有内容?另外,我现在所做的是在localhost中。不在生产服务器上。但是我通过复制我的生产文件来设置localhost,所以也许我需要在localhost上使用cache.php做一些不同的事情?虽然我认为我的答案对于大多数会找到此页面的人仍然相关,但我不确定它在这一点上是否会帮助您!我不再认为这是一个缓存问题,在你的情况下-这听起来更像是你有两个路由文件,几乎可以肯定,因为从5.2到5.3的变化。这也解释了路由中额外的“api/”——它们是以某种方式自动添加的。我对5.3知之甚少,在你的应用程序上运行一个文本搜索,查找工作路线名称,看看它是否超出了你的预期。另外请注意:此时,我只是想让Laravel忘记所有这些api/api路由(在我的api.php中,我将删除api前缀),因此我试图找出供应商文件夹中用于显示路由的文件的位置。在routes.php中,如果我添加了一个die语句或其他没有调用的语句,那么routes.php似乎被忽略了,而Laravel则被忽略了