Php Laravel路由,这是预期的行为吗?
实际上这不是一个问题,我想我能处理,但我想知道这是否符合预期 我有一个名为users的数据库表,然后我用Php Laravel路由,这是预期的行为吗?,php,laravel,Php,Laravel,实际上这不是一个问题,我想我能处理,但我想知道这是否符合预期 我有一个名为users的数据库表,然后我用 php artisan make:controller UserController --resource 它创建了预期的路由索引、存储、创建、显示、更新、销毁和编辑,一些路由获得了一些帖子 所以现在我想创建一个新的路径,给我用户的化身一个我以前使用存储方法存储的图像 因此,我在/routes/web.php文件中创建它,如下所示: Route::get('/user/avatar/{id
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路径,使一切工作正常!谢谢请把它写下来作为回答,这样我就可以检查它了-@路易斯福:谢谢,张贴。