2015-11-01 65 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。 –