2015-11-01 47 views
3

所以基本上我有一个存储功能和更新功能在我的controller.php,并想知道如何指定在需要时使用哪种方法。我的代码进度如下所示。任何人都有这个解决方案?如何指定使用哪种方法(存储和更新)laravel

routes.php文件

Route::resource('manage_accounts', 'ManageAccountsController', 
       ['only' => ['index', 'store', 'update']]); 

view.blade.php

<button class="btn btn-sm btn-warning" type="button" 
      data-toggle="modal" data-target="#register" value="{{ $user->id }}">Edit&nbsp;<i class="glyphicon glyphicon-edit"></i></button> 
<button type="button" class="btn btn-info btn-md" data-toggle="modal" data-target="#register">Register New User</button> 

<!-- Modal --> 
    <div id="register" class="modal fade" role="dialog"> 
     <div class="modal-dialog"> 

      <!-- Modal content--> 
      <div class="modal-content"> 
       <div class="modal-header"> 
        <button type="button" class="close" data-dismiss="modal">&times;</button> 
        <h4 class="modal-title">User Information</h4> 
       </div> 
       <div class="modal-body"> 
        <form class="form-horizontal" role="form" method="POST" action="/manage_accounts" novalidate> 
        <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
        <div class="form-group"> 
        <label class="control-label col-sm-3" for="name">Username:</label> 
        <div class="col-sm-5 @if ($errors->has('name')) has-error @endif"> 
         <input type="text" class="form-control" type="hidden" id="name" name="name" placeholder="Enter username"> 
         @if ($errors->has('name')) <p class="help-block">{{ $errors->first('name') }}</p> @endif 
        </div> 
       </div> 
       <div class="form-group"> 
       <label class="control-label col-sm-3" for="password">Password:</label> 
       <div class="col-sm-5 @if ($errors->has('password')) has-error @endif"> 
        <input type="password" class="form-control" type="hidden" id="password" name="password" placeholder="Enter login password"> 
        @if ($errors->has('password')) <p class="help-block">{{ $errors->first('password') }}</p> @endif 
       </div> 
      </div> 
      <div class="form-group"> 
      <label class="control-label col-sm-3" for="password_confirm">Confirm Password:</label> 
      <div class="col-sm-5 @if ($errors->has('password_confirm')) has-error @endif"> 
       <input type="password" class="form-control" type="hidden" id="password_confirm" name="password_confirm" placeholder="Re-type password again"> 
       @if ($errors->has('password_confirm')) <p class="help-block">{{ $errors->first('password_confirm') }}</p> @endif 
      </div> 
     </div> 
     <div class="form-group"> 
     <label class="control-label col-sm-3" for="email">Email:</label> 
     <div class="col-sm-5 @if ($errors->has('email')) has-error @endif"> 
      <input type="email" class="form-control" type="hidden" id="email" name="email" placeholder="Enter email address"> 
      @if ($errors->has('email')) <p class="help-block">{{ $errors->first('email') }}</p> @endif 
     </div> 
    </div> 
    <div class="form-group"> 
    <label class="control-label col-sm-3" for="mobile">Phone Number:</label> 
    <div class="col-sm-5 @if ($errors->has('mobile')) has-error @endif"> 
     <input type="hpnum" class="form-control" type="hidden" id="mobile" name="mobile" placeholder="Enter handphone number"> 
     @if ($errors->has('mobile')) <p class="help-block">{{ $errors->first('mobile') }}</p> @endif 
    </div> 
</div> 
<!--<div class="form-group"> 
    <label class="control-label col-sm-3" for="officeEx">Office Extension:</label> 
     <div class="col-sm-5"> 
      <input type="officeEx" class="form-control" id="officeEx" placeholder="Enter office extension"> 
     </div> 
    </div> -->                              
    <div class="form-group"> 
    <label class="control-label col-sm-3" for="role_id">Role:</label> 
    <div class="col-sm-5"> 
     <select class="form-control" type="hidden" id="role_id" name="role_id"> 
      @foreach ($roles as $role) 
      <option value="{{ $role->id }}">{{ $role->role_description }}</option> 
      @endforeach 
     </select> 
    </div> 
</div> 
<div class="form-group"> 
    <div class="col-sm-offset-3 col-sm-5"> 
     <button type="submit" class="btn btn-default">Update</button> 
    </div> 
</div> 
</form> 
</div> 
<div class="modal-footer"> 
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
</div> 
</div> 
</div> 
</div> 
</div> 

Controller.php这样

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

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

    public function store(StoreNewUserRequest $request) 
    { 
     // create the data for new user 
     $user = new User; 
     $user->name  = Input::get('name'); 
     $user->email = Input::get('email'); 
     $user->password = Hash::make(Input::get('password')); 
     $user->mobile = Input::get('mobile'); 
     $user->role_id = Input::get('role_id'); 

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

     Session::flash('flash_message', 'User successfully added!'); 

     return redirect()->back(); 
    } 

    public function update($id) 
    { 
     // update existing user 
     $user = User::findOrFail($id); 

     $user->name  = Input::get('name'); 
     $user->email = Input::get('email'); 
     $user->password = Hash::make(Input::get('password')); 
     $user->mobile = Input::get('mobile'); 
     $user->role_id = Input::get('role_id'); 

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

    } 
} 

回答

3

所有resource controllers为你做的是提供了一个方便快捷以下几点:

Route::get('/resource',     ['as' => 'resource.index',  'uses' => '[email protected]' ]); 
Route::get('/resource/create',   ['as' => 'resource.create',  'uses' => '[email protected]' ]); 
Route::post('/resource',    ['as' => 'resource.store',  'uses' => '[email protected]' ]); 
Route::get('/resource/{resource}',  ['as' => 'resource.show',  'uses' => '[email protected]'  ]); 
Route::get('/resource/{resource}/edit', ['as' => 'resource.edit',  'uses' => '[email protected]'  ]); 
Route::put('/resource/{resource}',  ['as' => 'resource.update',  'uses' => '[email protected]' ]); 
Route::delete('/resource/{resource}', ['as' => 'resource.destroy', 'uses' => '[email protected]' ]); 

所以,如果您拨打Route::resource('manage_accounts', 'ManageAccountsController')您正在创建路线。你具体告诉Laravel仅创建其中3,即这些:

Route::get('/resource',     ['as' => 'resource.index',  'uses' => '[email protected]' ]); 
Route::post('/resource',    ['as' => 'resource.store',  'uses' => '[email protected]' ]); 
Route::put('/resource/{resource}',  ['as' => 'resource.update',  'uses' => '[email protected]' ]); 

您可以通过请求这些航线的URL,例如打电话给你的控制器上的三种方法你会“叫”索引路线只需通过请求它的URL:

GET http://server/resource 

当我看到您的标记,我看到这种形式的标签:

<form class="form-horizontal" role="form" method="POST" action="/manage_accounts" novalidate> 

这将创建这个HTTP请求时形式提交:

POST http://server.com/manage_accounts 

比较,为您的资源路线,这将风呼唤你的控制器的store()方法。如果您希望该表单调用update()方法,则必须发出PUT请求。由于HTML形成can't make PUT requests,Laravel提供一种方法来模拟天生与形式PUT请求:

<form class="form-horizontal" role="form" method="POST" action="/manage_accounts/{{ $account->id }}" novalidate> 
    <input type="hidden" name="_method" value="PUT" /> 

还要注意,形式张贴到URL已更改,并应包括要更新的实际帐户的ID 。

您可能会发现将它与什么工匠本身视为可用路线进行比较会有帮助。您可以通过发布手工命令$ php artisan route:list(Laravel 5)或$ php artisan routes(Laravel 4)

2

列出所有可用路线。使用存储方法可在数据库中创建记录。更新方法用于编辑记录。类似示例创建方法 - 注册用户和更新方法 - 编辑配置文件