Meera
Meera

Reputation: 103

Laravel : BadMethodCallException Method [store] does not exist

I just downloaded and started a new project with the latest Laravel 4.2. When trying to submit a form I get the following error : BadMethodCallException Method [store] does not exist

Here are my files : controller - admin/AdminController

<?php
  namespace admin;

  use Illuminate\Support\Facades\View;
  use App\Services\Validators\ArticleValidator;
  use Input, Notification, Redirect, Sentry, Str;

  class AdminController extends \BaseController {

      public function index() {

          if (Input::has('Login')) {

              $rules = array(
                  'email' => 'required',
                  'password' => 'required|min:3',
                  'email' => 'required|email|unique:users'
              );

              $validator = Validator::make(Input::all(), $rules);

              if ($validator->fails()) {
                  return Redirect::to('admin\AdminController')->withErrors($validator);

              } else {

                  // redirect
                  Session::flash('message', 'Successfully created user!');
                  return Redirect::to('admin\AdminController');
              }
          }
          $data['title'] = ADMIN;
          return View::make('admin.index', $data);
      }
  }

View page - admin/index.blade.php

<div class="container">
        {{ Form::open(array('url' => ADMIN,'id' => 'login')) }}

            <div id="icdev-login-wrap">


            <div class="raw align-center logoadmin">{{ HTML::image('images/logo.png') }}</div>
            <div id="icdev-login">
            <h3>Welcome, Please Login</h3>




                <div class="mar2_bttm input-group-lg"><input type="text" class="form-control loginput" placeholder="Email" name="email"></div>

                <div class="mar2_bttm input-group-lg"><input type="password" class="form-control loginput" placeholder="Password" name="password"></div>
                <div ><input type="submit" class="btn btn-default btn-lg btn-block cus-log-in" value="Login" /></div>
                <div class="row align-center forgotfix">

                  <input type="hidden" name="Login" value="1">
                </div>
                </div>
                <div>

                </div>
            </div>
            {{ Form::close() }}
            </div>

Upvotes: 2

Views: 13235

Answers (1)

Martin Bean
Martin Bean

Reputation: 39389

The error message tells you what the problem is: the method called store() doesn’t exist. Add it to your controller:

<?php
namespace admin;

use Illuminate\Support\Facades\View;
use App\Services\Validators\ArticleValidator;
use Input, Notification, Redirect, Sentry, Str;

class AdminController extends \BaseController {

    public function index()
    {
        // leave code as is
    }

    public function store()
    {
        // this is your NEW store method
        // put logic here to save the record to the database
    }

}

A couple of points:

  • Use camel-casing for name spaces (i.e. namespace admin should be namespace Admin)
  • Read the Laravel documentation on resource controllers: http://laravel.com/docs/controllers#resource-controllers
  • You can also automatically generate resource controllers with an Artisan command. Run $ php artisan make:controller ItemController, replacing ItemController with the name of the controller, i.e. ArticleController or UserController.

Upvotes: 2

Related Questions