对于学校,我们必须使用laravel制作租船系统。 我对laravel并不陌生,对编程一般来说也很陌生。 在我的YachtsController中,我有一个函数更新,该函数是在edit.blade.php文件中编辑游艇的所有值之后调用的。现在我要做的是,如果我单击“出租”按钮,它将把数据库中的游艇状态从“可用”更新为“不可用”。我该怎么做呢?我必须为此创建一个名为“ rent”的新功能吗?
游艇视图:
{!! Form::open(['action' => ['YachtsController@update', $yacht->id], 'method' => 'POST']) !!}
{{Form::hidden('_method', 'PUT')}}
{{Form::submit('Rent',['class' => 'btn btn-primary'])}}
{!! Form::close() !!}
YachtsController:
public function update(Request $request, $id)
{
$this->validate($request, [
'name' => 'required',
'yachttype-list' => 'required',
'port-list' => 'required',
'status' => 'required',
'code' => 'required'
]);
$yacht = Yacht::find($id);
$yacht->name = $request->input('name');
$yacht->yacht_type_id = $request->input('yachttype-list');
$yacht->port_id = $request->input('port-list');
$yacht->status = $request->input('status');
$yacht->code = $request->input('code');
$yacht->save();
return redirect('/yachts')->with('success', 'Yacht updated!');
}
那么,如果我提交表格将更改状态,该怎么办?
编辑:
所以我现在尝试制作一个名为rent的新功能:
游艇视图:
{!! Form::open(['action' => ['YachtsController@rent', $yacht->id], 'method' => 'POST']) !!}
{{Form::hidden('_method', 'PUT')}}
{{Form::submit('Rent',['class' => 'btn btn-primary'])}}
{!! Form::close() !!}
YachtsController租用功能
public function rent($id)
{
$yacht = Yacht::find($id);
$yacht->status = "Unavailable";
$yacht->save();
return redirect('/yachts')->with('success', 'Yacht rented!');
}
路线:
Route::get('yachts/rent', 'YachtsController@rent');
Route::resource('yachts', 'YachtsController');
现在,当我单击视图上的“租用”按钮时,似乎它仍在验证我的更新功能中的表单,并给了我这个错误:
答案 0 :(得分:1)
您从update
方法中获得验证错误的原因是Laravel认为您正在尝试通过将航线放置到/yachts/{yacht id}
来更新整个游艇。您真正想要的是以特定方式更新特定游艇(出租)。
执行此操作的最佳方法(我认为)是修改您的路由以显式创建您的PUT路由,然后使用该名称在表单上使用:
Route::put('yachts/{id}/rent', 'YachtsController@rent')->name('yacht.rent');
Route::resource('yachts', 'YachtsController');
然后您的表单可以使用新的命名路由:
{!! Form::open(['route' => ['yacht.rent', $yacht->id], 'method' => 'POST']) !!}
应将您的表格输入正确的路线。
答案 1 :(得分:1)
您的游艇/租金方法是get,但您认为您使用put方法。 因此,当您提交表单时,它仍然可以通过put方法转到yacth / {id}(函数更新)。在update函数中,有验证器,因此会给出验证错误。
我的解决方案是创建新的put链接,并且现在可以在其中没有验证器的情况下运行。
您的路线:
Console logs
Am getting this logs on the console
Oct 22, 2019 8:51:29 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Register] in context with path [/registeruser] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: org.hibernate.cfg.Configuration
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
at RegisterDAO.getSessionFactory(RegisterDAO.java:8)
at RegisterDAO.create(RegisterDAO.java:15)
at Register.doPost(Register.java:34)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
在您的控制器中:
Route::put('yachts/update_rent/{id}', 'YachtsController@update_rent')