Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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
Php Laravel路由,这是预期的行为吗?_Php_Laravel - Fatal编程技术网

Php Laravel路由,这是预期的行为吗?

Php Laravel路由,这是预期的行为吗?,php,laravel,Php,Laravel,实际上这不是一个问题,我想我能处理,但我想知道这是否符合预期 我有一个名为users的数据库表,然后我用 php artisan make:controller UserController --resource 它创建了预期的路由索引、存储、创建、显示、更新、销毁和编辑,一些路由获得了一些帖子 所以现在我想创建一个新的路径,给我用户的化身一个我以前使用存储方法存储的图像 因此,我在/routes/web.php文件中创建它,如下所示: Route::get('/user/avatar/{id

实际上这不是一个问题,我想我能处理,但我想知道这是否符合预期

我有一个名为users的数据库表,然后我用

php artisan make:controller UserController --resource
它创建了预期的路由索引、存储、创建、显示、更新、销毁和编辑,一些路由获得了一些帖子

所以现在我想创建一个新的路径,给我用户的化身一个我以前使用存储方法存储的图像

因此,我在/routes/web.php文件中创建它,如下所示:

Route::get('/user/avatar/{id?}', 'UserController@avatar')->name('user.avatar');
我知道该函数可以工作,如果我转到它,它将返回与用户1关联的图像。现在的问题是,我希望参数是可选的null,如果我没有得到id,那么我将提供\Auth::user->id图像

问题是我为什么去它给了我一个错误,我不会在这里打印它,因为它不相关,它看起来像是试图去GET的/user/{id}路径,该路径是用资源创建的,它将头像视为{id}

所以我知道,我应该去掉行路由::resource'user','UserController';然后分别创建每条路线,对吗

我的问题是,它应该是这样工作的吗?我是否应该创建另一个,比如说,HelperController,在那里我可以指向/avatar/{id?}路径

编辑: artisan route:有关用户的列表输出为:

|        | GET|HEAD  | user                   | user.index       | App\Http\Controllers\UserController@index                              | web          |
|        | POST      | user                   | user.store       | App\Http\Controllers\UserController@store                              | web          |
|        | GET|HEAD  | user/avatar/{id?}      | user.avatar      | App\Http\Controllers\UserController@avatar                             | web          |
|        | GET|HEAD  | user/create            | user.create      | App\Http\Controllers\UserController@create                             | web          |
|        | GET|HEAD  | user/{user}            | user.show        | App\Http\Controllers\UserController@show                               | web          |
|        | PUT|PATCH | user/{user}            | user.update      | App\Http\Controllers\UserController@update                             | web          |
|        | DELETE    | user/{user}            | user.destroy     | App\Http\Controllers\UserController@destroy                            | web          |
|        | GET|HEAD  | user/{user}/edit       | user.edit        | App\Http\Controllers\UserController@edit                               | web          |
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
错误是:

 ErrorException (E_ERROR)
Trying to get property 'name' of non-object (View: D:\Dropbox\_www\reco\resources\views\user\profile.blade.php)
Previous exceptions

    Trying to get property 'name' of non-object (0)
这是在$user->name调用中,$user未定义,我知道是什么原因导致的,是控制器中显示的find$id没有得到任何结果,因为它正在搜索作为id的化身


事实上,如果我更改findOrFail的find,它将给出预期的404错误。因此,我非常确定它将化身解释为id。

您必须首先定义最明确的路线:

Route::get('/user/avatar/{id?}', 'UserController@avatar');
Route::resource('user', 'UserController');
为什么??因为route resource创建了一个GET user/{user}路由,如果您首先注册资源路由,Laravel将查看url user/avatar/1,并认为化身部分实际上是用户的ID


这只是laravel的一个怪癖。

您必须首先定义最明确的路线:

Route::get('/user/avatar/{id?}', 'UserController@avatar');
Route::resource('user', 'UserController');
为什么??因为route resource创建了一个GET user/{user}路由,如果您首先注册资源路由,Laravel将查看url user/avatar/1,并认为化身部分实际上是用户的ID


这只是拉威尔的一个怪癖。

请告诉我们/user/avatar/的错误是什么。您还可以考虑共享PHP工匠路由:列表输出。定义路由::在定义路由之前:获取/用户/化身/ {ID}}::资源。这可能是因为路由器认为/avatar/part是id参数。但是,是的,一些关于错误的信息会很好。这是正确的答案!在资源之前移动get路径,使一切工作正常!谢谢请把它写下来作为回答,这样我就可以检查它了-@luisfer谢谢,发帖了。请告诉我们/user/avatar/的错误是什么。您还可以考虑共享PHP工匠路由:列表输出。定义路由::在定义路由之前:获取/用户/化身/ {ID}}::资源。这可能是因为路由器认为/avatar/part是id参数。但是,是的,一些关于错误的信息会很好。这是正确的答案!在资源之前移动get路径,使一切工作正常!谢谢请把它写下来作为回答,这样我就可以检查它了-@路易斯福:谢谢,张贴。