Laravel:方法[show]不存在

时间:2014-04-08 16:58:15

标签: php laravel laravel-4

尝试访问此网址时,用户/登录'我收到了这个错误,这是我的代码:

查看users / login.blade.php:

<head>Sign in : </head>
<body>
{{ HTML::ul($errors->all()) }}
<?php echo Form::open(array('url' => 'users')); 

echo '<div class="form-group">';
    echo Form::label('username', 'User Name');
    echo Form::text('ausername', null, array('class' => 'form-control'));
echo '</div>';

echo '<div class="form-group">';
    echo Form::label('Password', 'Password');
    echo Form::password('apassword', null, array('class' => 'form-control'));
echo '</div>';

echo Form::submit('Sign in', array('class' => 'btn btn-primary'));

echo Form::close();
?>
</body>

Controller Usercontroller.php

<?php

class UserController extends BaseController {


    public function index()
    {
        $users = User::all();
        return View::make('users.index')
            ->with('users', $users);
    }


    public function create()
    {
        return View::make('users.create');
    }


    public function store()
    {
        $rules = array(
            'username'   => 'required|alpha_dash',
            'password'   => 'required|confirmed',
            'name'       => 'required|regex:/^[a-zA-Z][a-zA-Z ]*$/',
            'email'      => 'required|email|unique:users',
            'country'    => 'required'
        );
        $validator = Validator::make(Input::all(), $rules);

        if ($validator->fails()) {
            return Redirect::to('users/create')
                ->withErrors($validator)
                ->withInput(Input::except('password'));
        } else {
            $user = new User;
            $user->username = Input::get('username');
            $user->password = Hash::make(Input::get('password'));
            $user->name = Input::get('name');
            $user->email = Input::get('email');
            $user->country = Input::get('country');
            $user->save();
            // redirect
            Session::flash('message', 'Successfully created user!');
            return Redirect::to('users');
            }
    }


    public function login()
    {
        $reflector = new ReflectionClass("UserController");
        $fn = $reflector->getFileName();
        dd($fn);
        return View::make('users.login');   
    }


    public function authen()
    {
        if (Auth::attempt(array('username' => Input::get('ausername'), 'password' => Input::get('apassword'))))
        {
            return Redirect::intended('users');
        }   
    }


}

和我的routes.php

<?php
Route::resource('users','UserController');
Route::get('users/login', 'UserController@login');
Route::get('/', function()
{
    return View::make('hello');
});

这是路线问题,谢谢你的帮助

7 个答案:

答案 0 :(得分:20)

我遇到了和你一样的问题。问题最终是重新安排资源代码,即

Route::get('masterprices/data', 'MasterPriceController@data');
Route::get( 'masterprices/upload', 'MasterPriceController@upload');
Route::post('masterprices/upload', 'MasterPriceController@do_upload');
Route::get('masterprices/{masterprices}/multipledelete', 'MasterPriceController@multipledelete');
Route::resource('masterprices', 'MasterPriceController');

它会检查另一个可能的处理程序,如果没有,它将到达最后一行,这是处理索引页面的资源。

答案 1 :(得分:12)

这一个:

Route::resource('users','UserController');

定义以下路线:

| GET|HEAD users               | users.index   | UsersController@index  
| GET|HEAD users/create        | users.create  | UsersController@create 
| POST users                   | users.store   | UsersController@store  
| GET|HEAD users/{users}       | users.show    | UsersController@show   
| GET|HEAD users/{users}/edit  | users.edit    | UsersController@edit   
| PUT users/{users}            | users.update  | UsersController@update 
| PATCH users/{users}          |               | UsersController@update 
| DELETE users/{users}         | users.destroy | UsersController@destroy

所以URI用户/登录调用users.show路由,这就是问题所在。

解决方案就像Kryten说完全删除该路由,但我想你仍然想要使用一些资源路由,比如你的控制器(创建,存储,索引),所以最好使用这个:

Route::resource('users', 'UserController', ['only'=> ['index','create','store']]);

答案 2 :(得分:3)

Route::resource来电的问题列表。通过包含该语句,您可以告诉Laravel您希望将RESTful控制器用于以users开头的路径。这意味着当您点击URL&#39; users / login&#39;时,RESTful控制器会将其解释为&#34; show&#34; user控制器的操作失败,因为没有show方法。有关详细信息,请参阅http://laravel.com/docs/controllers#resource-controllers - 该页面上的表格说明了实施资源控制器时自动配置的路由。

解决方案是删除Route::resource('users','UserController');

答案 3 :(得分:2)

在路径文件中的资源路由之前添加自定义路由。

根据Laravel文档:

  

如果有必要在资源控制器之外添加除默认资源路由之外的其他路由,则应在调用Route :: resource之前定义这些路由;否则,资源方法定义的路由可能会无意中优先于您的补充路由:

答案 4 :(得分:1)

简单的解决方案是我刚读完你的问题后找到的解决方案。在任意::resource::get路线之后定义::post路线。我刚刚测试了4.2并且它正在工作(在遇到同样的问题之后)。

答案 5 :(得分:0)

我遇到了同样的问题,但这很奇怪。在我的路线文件中,我有:

Route::controller('carts', 'CartsApiController');

当我将其更改为:

Route::controller('cart', 'CartsApiController');

一切都很好,我没有再次出错。我不确定,但似乎是一些命名问题。

答案 6 :(得分:0)

我也遇到了同样的问题,但我发现这种使用路线非常愚蠢和愚蠢:

reduce

并在您的视图或控制器中使用路由(&#39; userLogin&#39;);用于路由到控制器中的特定功能