2015-11-01 166 views
1

我有一個註冊函數完成如下所示,並想知道如何添加更新方法。我只是爲我的更新添加另一條路線併爲其添加控制器功能?我在正確的軌道上嗎?以下是否正確?在運行時,它告訴我的致命異常,意想不到的回報..添加更新方法laravel

route.php

Route::post('manage_accounts', '[email protected]'); 
Route::post('manage_accounts', '[email protected]'); 

Controller.php這樣

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests\StoreNewUserRequest; 
use Illuminate\Support\Facades\Redirect; 
use Illuminate\Support\Facades\Session; 
use Illuminate\Support\Facades\Hash; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use App\User; 
use App\Role; 

class ManageAccountsController extends Controller 
{ 
    public $userRepository; 

    public function __construct(UserRepository $userRepository) 
    { 
     $this->userRepository = $userRepository; 
    } 

    public function index() 
    { 
     $users = User::orderBy('name')->get(); 
     $roles = Role::all(); 

     return view('manage_accounts', compact('users', 'roles')); 
    } 

    public function register(StoreNewUserRequest $request) 
    { 
     // process the form here 
     $this->userRepository->upsert($request); 
     Session::flash('flash_message', 'User successfully added!'); 

     return redirect()->back(); 
    } 

    public function update(UpdateUserRequest $request) 
    { 
     $this->userRepository->upsert($request) 
     //Session::flash('flash_message', 'User successfully updated!'); 

     return redirect()->back(); 
    } 
} 

class UserRepository { 

    public function upsert($data) 
    { 

      // Now we can separate this upsert function here 
     $user = new User; 
     $user->name  = $data['name']; 
     $user->email = $data['email']; 
     $user->password = Hash::make($data['password']); 
     $user->mobile = $data['mobile']; 
     $user->role_id = $data['role_id']; 

      // save our user 
     $user->save(); 

     return $user; 
    } 
} 

回答

0

使用缺省路由和控制方法,將工作最好在你的情況。 使用PHP工匠化妝做一個控制器:控制器命令,您將得到所產生的各種CRUD任務

/** 
* Display a listing of the resource. 
* 
* @return \Illuminate\Http\Response 
*/ 
public function index() 
{ 
    // 
} 

/** 
* Show the form for creating a new resource. 
* 
* @return \Illuminate\Http\Response 
*/ 
public function create() 
{ 
    // 
} 

/** 
* Store a newly created resource in storage. 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function store(Request $request) 
{ 
    // 
} 

/** 
* Display the specified resource. 
* 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function show($id) 
{ 
    // 
} 

/** 
* Show the form for editing the specified resource. 
* 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function edit($id) 
{ 
    // 
} 

/** 
* Update the specified resource in storage. 
* 
* @param \Illuminate\Http\Request $request 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function update(Request $request, $id) 
{ 
    // 
} 

/** 
* Remove the specified resource from storage. 
* 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function destroy($id) 
{ 
    // 
} 

而在你的路線,你可以做類似

Route::resource('accounts','AccountsController'); 

現在絕對可以限制方法通過在路線中進行更改的方法如下

Route::resource('accounts', 'AccountsController', 
       ['only' => ['index', 'show', 'update']]); 

要查看路線並訪問它們,您可以使用以下命令

php artisan route:list 
+0

謝謝,但我怎麼知道我的view.blade.php知道調用哪個方法?例如是否存儲或更新? – EunJi

+0

對於商店,您將向POST帳戶創建一個表單,而對於更新,您會向/ accounts/{id}發送PATCH請求,其中id是您要更新的帳戶的ID。 –