хорошо, допустим, у меня есть ProfileController.php
. в методе edit
это выглядит так:
class ProfileController extends Controller
{
public function edit(\App\User $user)
{
return view('profile.edit',compact('user'));
}
public function update(\App\User $user, \App\Http\Requests\ProfileRequest $request)
{
$user->update($request->all());
return back()->withStatus(__('Profile successfully updated.'));
}
}
просто показывает профиль пользователя и форму для его редактирования.
маршрут к этому методу выглядит следующим образом:
Route::group(['middleware' => 'auth'], function () {
Route::group(['middleware' => '\App\Http\Middleware\DefaultUrlParamsMiddleware'], function () {
Route::get('profile/{username?}', ['as' => 'profile.edit', 'uses' => 'ProfileController@edit']);
Route::put('profile/{username?}', ['as' => 'profile.update', 'uses' => 'ProfileController@update']);
});
});
Как вы можете видеть, в этом URL есть необязательный параметр username
, и я хочу привязать этот параметр URL к пользовательскому объекту, который требуется для методов ProfileController.php
.
для этого у меня есть это в моем appProvider.php
:
class AppServiceProvider extends ServiceProvider
{
public function register()
{
//
}
public function boot(Router $router)
{
// provide user for profile edit
$router->bind( 'username', function ( $username ){
return \App\User::where( 'name', $username )->firstOrFail();
});
}
}
, в этот момент все работает хорошо, НО, только если я предоставлю параметр username
в URL, например, если я иду вmydomain.test/profile/mytestinguser
это работает хорошо.
ЧТО Я ХОЧУ, ЧТО Я НЕ ХОЧУ УКАЗАТЬ ПАРАМ ПОЛЬЗОВАТЕЛЯ В URL, ЭТО ДОЛЖНО ИСПОЛЬЗОВАТЬ МОЕ ТЕКУЩЕЕ ПОЛЬЗОВАТЕЛЬСКОЕ ИМЯ ПО УМОЛЧАНИЮ, поэтому, если я перейду к mydomain.test/profile
, он должен учитывать имя пользователяparam, равный моему текущему имени пользователя, равному mytestinguser
, а затем использовать привязку, чтобы проанализировать его для объекта пользователя и затем передать его методу edit
. Но это не работает. поэтому я немного посмотрел, и что-то было в URL :: defaults в промежуточном ПО, поэтому я установил это промежуточное ПО с именем DefaultUrlParamsMiddleware
, а затем его содержимое выглядит следующим образом:
use Illuminate\Support\Facades\URL;
class DefaultUrlParamsMiddleware
{
public function handle($request, Closure $next)
{
URL::defaults(['username' => auth()->user()->name ]);
return $next($request);
}
}
, но это не работаетлибо просто показывает мне ноль как $user
в методе edit
. почему это?