2017-06-30 12 views
-1

私はユーザーの詳細を更新するフォームを持っていますが、ユーザーが電子メールアドレスではなく名前を更新したいのであれば、それは変わりません。しかし私の全努力にもかかわらず、私はそれを回避することはできません。Laravel request、update validation

[email protected]

電子メールはまだ

[email protected]され、私は自分のプロフィールを更新していますそれは私スロー:

それでは、私の電子メールがあるとしましょう電子メールは一意でなければならないというエラーです。

だから私はこれを試してみました:

<?php 

namespace App\Http\Requests; 

use Illuminate\Foundation\Http\FormRequest; 

class UserRequest extends FormRequest 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      'name' => 'required|alpha_spaces|min:5|max:30', 
      'email' => 'required|email|unique:users,email,'.$user->id, 
      'telephone' => 'required|numeric|max:15', 
      'twitter' => 'alpha_dash', 
      'facebook' => 'alpha_dash', 
      'instagram' => 'alpha_dash', 
     ]; 
    } 
    public function messages() 
    { 
     return [ 
      'name.required' => 'Name is required', 
      'name.alpha_spaces' => 'Name can only contain letters and spaces', 
      'name.min' => 'Name must contain at least 5 characters', 
      'name.max' => 'Name can only contain up to 30 characters', 

      'email.required' => 'Email address is required', 
      'email.email' => 'Email address must be a right format', 
      'email.unique' => 'Email address must be unique', 

      'telephone.required' => 'Telephone is required', 
      'telephone.numeric' => 'Telephone can only contain numbers', 
      'telephone.max' => 'Telephone can only contain maximum of 11 characters', 

      'twitter.alpha_dash' => 'Twitter can only contain letters and dashes', 

      'facebook.alpha_dash' => 'Facebook can only contain letters and dashes', 

      'instagram.alpha_dash' => 'Instagram can only contain letters and dashes', 
    ]; 
    } 
} 

しかし私が手:

未定義の変数:ここではユーザー

public function update(UserRequest $request, $id) 
    { 
     $user = User::find($id); 
     $name = $request->input('name'); 
     $email = $request->input('email'); 
     $twitter = $request->input('twitterp'); 
     $facebook = $request->input('facebookp'); 
     $instagram = $request->input('instagramp'); 
     $telephone = $request->input('telephone'); 
     $user->name = $name; 
     $user->email = $email; 
     $user->twitter_personal = $twitter; 
     $user->facebook_personal = $facebook; 
     $user->instagram_personal = $instagram; 
     $user->telephone = $telephone; 
     $result = $user->save(); 
     if($result) { 
     $message = 'success'; 
     }else{ 
     $message = 'error'; 
     } 
     return redirect()->back()->withInput()->with('message', $message); 
    } 
+0

あなたのルートとブレードコードを入れてください –

+0

あなたは 'UserRequest :: rules()'メソッドで '$ user'変数を初期化していないので、エラーです。 – kajetons

+0

どのように初期化できますか?私はそれをしようとしましたが、失敗しました –

答えて

0

は短い何か

public function update(UserRequest $request, $id) 
{ 
    $user = User::findOrFail($id); 

    $user->name = $request->input('name'); 
    $user->email = $request->input('email'); 
    $user->twitter_personal = $request->input('twitterp'); 
    $user->facebook_personal = $request->input('facebookp'); 
    $user->instagram_personal = $request->input('instagramp'); 
    $user->telephone = $request->input('telephone'); 
    $user->save(); 

    return redirect()->back()->withInput()->with('message', $message); 
} 
です

ビューページでは、すべての入力に古いデータが入力されます。 Examlpe

<inut type="text" name="email" value="{{ $user->email }}"> 
0

このソリューションでは、2つの条件を変化させることができます。

ファーストケース認証されたユーザー自身が電子メールを変更しようとしている場合、これはこの方法で行うことができます。後者の場合

'email' => 'required|email|unique:users,email,' . auth()->user()->id,` 

がSuperAdminはこの場合のために、他のユーザの電子メールを変更するための責任があるとすることができ、それは次のように達成することができます。

routeファイル。ここでワイルドカード{user}は、更新が必要なユーザーを識別するために渡す必要があるパラメータです。

Route::get('/profile/user/{user}/edit', '[email protected]'); 
Route::get('/profile/user/{user}', '[email protected]');` 

validationでは、リクエストパラメータを取得できます。

'email' => 'required|email|unique:users,email,' . request()->route()->parameter('user'),` 

:パラメータのキーは、ワイルドカード名でなければなりません。この場合{user}。あなたの場合、{id}または{username}があります。

関連する問題