如何指定使用哪种方法(存储和更新)laravel
How to specify which method to use (store and update) laravel
所以基本上我的 controller.php 中有存储功能和更新功能,我想知道如何指定在需要时使用哪种方法。我的代码进度如下图。有人对此有解决方案吗?
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 <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">×</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();
}
}
resource controllers 所做的一切就是为您提供一个方便的快捷方式:
Route::get('/resource', ['as' => 'resource.index', 'uses' => 'ResourceController@index' ]);
Route::get('/resource/create', ['as' => 'resource.create', 'uses' => 'ResourceController@create' ]);
Route::post('/resource', ['as' => 'resource.store', 'uses' => 'ResourceController@store' ]);
Route::get('/resource/{resource}', ['as' => 'resource.show', 'uses' => 'ResourceController@show' ]);
Route::get('/resource/{resource}/edit', ['as' => 'resource.edit', 'uses' => 'ResourceController@edit' ]);
Route::put('/resource/{resource}', ['as' => 'resource.update', 'uses' => 'ResourceController@update' ]);
Route::delete('/resource/{resource}', ['as' => 'resource.destroy', 'uses' => 'ResourceController@destroy' ]);
因此,如果您调用 Route::resource('manage_accounts', 'ManageAccountsController')
,您将创建 7 条路线。您明确告诉 Laravel 只创建其中的 3 个,即这些:
Route::get('/resource', ['as' => 'resource.index', 'uses' => 'ResourceController@index' ]);
Route::post('/resource', ['as' => 'resource.store', 'uses' => 'ResourceController@store' ]);
Route::put('/resource/{resource}', ['as' => 'resource.update', 'uses' => 'ResourceController@update' ]);
您可以通过请求这些路由 URL 来调用控制器上的这三种方法,例如您只需请求它 URL:
即可 'call' 索引路由
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。
您可能还会发现将此与 artisan 自己认为的可用路线进行比较很有帮助。您可以通过发出 artisan 命令 $ php artisan route:list
(Laravel 5) 或 $ php artisan routes
(Laravel 4)
列出所有可用路由
使用 Store 方法在数据库中创建记录。用于编辑记录的更新方法。像示例创建方法 - 注册用户和更新方法 - 编辑配置文件
所以基本上我的 controller.php 中有存储功能和更新功能,我想知道如何指定在需要时使用哪种方法。我的代码进度如下图。有人对此有解决方案吗?
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 <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">×</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();
}
}
resource controllers 所做的一切就是为您提供一个方便的快捷方式:
Route::get('/resource', ['as' => 'resource.index', 'uses' => 'ResourceController@index' ]);
Route::get('/resource/create', ['as' => 'resource.create', 'uses' => 'ResourceController@create' ]);
Route::post('/resource', ['as' => 'resource.store', 'uses' => 'ResourceController@store' ]);
Route::get('/resource/{resource}', ['as' => 'resource.show', 'uses' => 'ResourceController@show' ]);
Route::get('/resource/{resource}/edit', ['as' => 'resource.edit', 'uses' => 'ResourceController@edit' ]);
Route::put('/resource/{resource}', ['as' => 'resource.update', 'uses' => 'ResourceController@update' ]);
Route::delete('/resource/{resource}', ['as' => 'resource.destroy', 'uses' => 'ResourceController@destroy' ]);
因此,如果您调用 Route::resource('manage_accounts', 'ManageAccountsController')
,您将创建 7 条路线。您明确告诉 Laravel 只创建其中的 3 个,即这些:
Route::get('/resource', ['as' => 'resource.index', 'uses' => 'ResourceController@index' ]);
Route::post('/resource', ['as' => 'resource.store', 'uses' => 'ResourceController@store' ]);
Route::put('/resource/{resource}', ['as' => 'resource.update', 'uses' => 'ResourceController@update' ]);
您可以通过请求这些路由 URL 来调用控制器上的这三种方法,例如您只需请求它 URL:
即可 'call' 索引路由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。
您可能还会发现将此与 artisan 自己认为的可用路线进行比较很有帮助。您可以通过发出 artisan 命令 $ php artisan route:list
(Laravel 5) 或 $ php artisan routes
(Laravel 4)
使用 Store 方法在数据库中创建记录。用于编辑记录的更新方法。像示例创建方法 - 注册用户和更新方法 - 编辑配置文件