我正在努力学习拉威尔4。我创建了一个表单(使用视图),并使用index方法通过控制器(testController)返回它。我使用artisan命令创建了此控制器。
我在控制器中创建了另一种方法(多洛金)来处理表单。在表单url参数中,我给出了多洛金方法的地址。
这是路线:
Route::resource('test', 'testController');
这是控制器
<?php
class testController extends \BaseController {
public function index()
{
return View::make('test.index');
}
public function dologin(){
echo "working";
}
这是索引视图文件
{{ Form::open(array('url'=>'test/loginform')) }}
{{ Form::text('username', null, array('placeholder'=>'Username')) }}<br/>
{{ Form::password('password', array('placeholder'=>'Password')) }}<br/>
{{ Form::submit('Login') }}
{{ Form::close() }}
提交表单后,它应该在浏览器中呼应“工作”。但提交表格后,页面为空白。url虽然从
/laravel/公共/索引。php/测试/
到
/laravel/公共/索引。php/test/loginform
umefarooq的答案是正确的,但是希望这个答案能够让您更深入地了解如何在您的Laravel开发中取得领先,以及一致的最佳实践编程风格。
首先,类名应该以大写字母开头。尽量保持方法/函数名以小写字母开头,类名以大写字母开头。
其次,在BaseController前面不需要\
。只有在为控制器命名时才需要反斜杠。e、 g.如果您的控制器位于文件夹Admin\TestController中。php
,然后通过键入
具体与您的问题相关:
当您在路由文件中使用资源路由时,您正在告诉Laravel控制器可以使用以下任何或所有方法:索引
,显示
,创建
,存储
,编辑
,更新
和销毁
。
因此,Route::resource('test','TestController')代码>将指向TestController。php在您的控制器文件夹中。
您的TestController应该结构如下,大多数restful控制器将使用以下作为某种样板:
<?php
class TestController extends BaseController
{
public function __construct()
{
}
// Typically used for listing all or filtered subset of items
public function index()
{
$tests = Test::all();
return View::make('test.index', compact('tests'));
}
// Typically shows a specific item detail
public function show($id)
{
$test = Test::find($id);
return View::make('test.show', compact('test'));
}
// Typically used to show the form which creates a new resource.
public function create()
{
return View::make('test.create');
}
// Handles the post request from the create form
public function store()
{
$test = new Test;
$test->attribute1 = Input::get('attribute1');
$test->attribute2 = Input::get('attribute2');
$test->attribute3 = Input::get('attribute3');
$test->attribute4 = Input::get('attribute4');
if ($test->save())
{
return Redirect::route('test.show', $test->id);
}
}
// Shows the edit form
public function edit($id)
{
$test = Test::find($id);
return View::make('test.edit', compact('test'));
}
// Handles storing the submitted PUT request from the edit form.
public function update($id)
{
$test = Test::find($id);
$test->attribute1 = Input::get('attribute1');
$test->attribute2 = Input::get('attribute2');
$test->attribute3 = Input::get('attribute3');
$test->attribute4 = Input::get('attribute4');
if ($test->save())
{
return Redirect::route('test.show', [$id]);
}
}
// Used to delete a resource.
public function destroy($id)
{
$test = Test::find($id);
$test->delete();
return Redirect::route('test.index');
}
}
此外,使用资源控制器的好处是可以利用命名路由。
在终端窗口中,键入php工匠路由
。
您应该会看到7条命名路线。
test.index
test.destroy
test.show
test.edit
test.destroy
test.create
test.update
所以在你的身体里,不是做
{{Form::open(数组('url'=
{{ Form::open(array('route' => array('test.store')) }}
这样,如果您更改了url,或者需要在您的站点结构中移动,这将很容易,因为url后的表单将自动绑定到路由文件中的命名路由。您不需要更新每个视图,以确保网址指向正确的位置。
最后,作为一个起点,我建议使用JefreyWay/Laravel-4-Generators包。https://github.com/JeffreyWay/Laravel-4-Generators。使用它们创建资源、控制器、视图等,并查看生成器如何为您构建模型、视图和控制器。
以下是另一个帮助您入门的资源:
https://laracasts.com/lessons/understanding-rest
Route::resource('test', 'testController');
将适用于控制器的RESTful方法,如索引、编辑、销毁、创建,现在您正在使用控制器的自定义方法。为此,您需要创建另一个路由
Route::post("test/loginform",'testController@dologin');
希望这对你有用。阅读路线文档http://laravel.com/docs/routing
除了umefarooq所说的,这是100%准确的。您还需要查看flash消息。
public function dologin(){
//do login verification stuff
If login validated
Return redirect::to(logged/page)->with('message', 'You're logged in');
If login failed
Return redirect::to('test')->with('message', 'You login credentials fail');
}
进一步研究:http://laravel.com/docs/responses