Laravel: Метод [show] не существует
При попытке доступа к этому URL-адресу "пользователи/логин" я получил эту ошибку. Вот мой код:
Просмотреть пользователей /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>
Контроллер 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');
}
}
}
и мои маршруты .php
<?php
Route::resource('users','UserController');
Route::get('users/login', '[email protected]');
Route::get('/', function()
{
return View::make('hello');
});
Это проблема маршрута, спасибо за помощь
Ответы
Ответ 1
Я столкнулся с той же проблемой, что и вы. Проблема заканчивается перестановкой кода ресурса, то есть
Route::get('masterprices/data', '[email protected]');
Route::get( 'masterprices/upload', '[email protected]');
Route::post('masterprices/upload', '[email protected]_upload');
Route::get('masterprices/{masterprices}/multipledelete', '[email protected]');
Route::resource('masterprices', 'MasterPriceController');
Он проверяет другой возможный обработчик, если он не достигнет последней строки, которая является ресурсом для обработки индексной страницы.
Ответ 2
Этот:
Route::resource('users','UserController');
определяет следующие маршруты:
| GET|HEAD users | users.index | [email protected]
| GET|HEAD users/create | users.create | [email protected]
| POST users | users.store | [email protected]
| GET|HEAD users/{users} | users.show | [email protected]
| GET|HEAD users/{users}/edit | users.edit | [email protected]
| PUT users/{users} | users.update | [email protected]
| PATCH users/{users} | | [email protected]
| DELETE users/{users} | users.destroy | [email protected]
Итак, пользователи URI/login вызывают маршрут users.show и эту проблему.
Решение похоже на то, как сказал Крайтен, чтобы полностью удалить этот маршрут, но я полагаю, что вы все еще хотите использовать некоторые маршруты для ресурса, например, в вашем контроллере (создавать, хранить, индексировать), поэтому лучше используйте это:
Route::resource('users', 'UserController', ['only'=> ['index','create','store']]);
Ответ 3
Список проблем с вызовом Route::resource
. Включив это утверждение, вы говорите Laravel, что хотите использовать контроллер RESTful для путей, начинающихся с users
. Это означает, что когда вы нажимаете URL-адрес "users/login", контроллер RESTful интерпретирует это как действие "показать" для контроллера user
и терпит неудачу, поскольку нет метода show
. Подробнее см. http://laravel.com/docs/controllers#resource-controllers - таблица на этой странице объясняет, какие маршруты автоматически настраиваются при реализации контроллера ресурсов.
Решение состоит в удалении Route::resource('users','UserController');
.
Ответ 4
Добавьте настраиваемый маршрут до маршрутов ресурсов в файле маршрутов.
Согласно документации Laravel:
Если возникает необходимость добавлять дополнительные маршруты к контроллеру ресурсов за пределы маршрутов ресурсов по умолчанию, вы должны определить эти маршруты перед вызовом Route:: resource; в противном случае маршруты, определенные методом ресурса, могут непреднамеренно иметь приоритет над дополнительными маршрутами:
Ответ 5
Простое решение - это тот, который я только что нашел после прочтения вашего вопроса. Определите маршруты ::resource
после любых маршрутов ::get
или ::post
. Я только что протестировал 4.2, и он работает (после того, как у вас такая же проблема).
Ответ 6
У меня была такая же проблема, но это было странно. В моем файле маршрутов я:
Route::controller('carts', 'CartsApiController');
Когда я изменил его на:
Route::controller('cart', 'CartsApiController');
Все было в порядке, и у меня не было ошибки снова. Я не уверен, но, похоже, проблема с именами.
Ответ 7
Я также столкнулся с одной и той же проблемой, но я нашел очень глупым и глупым ошибку, используя один из следующих способов: -
Route::get('users/login', ['uses'=>'[email protected]', 'as'=> 'userLogin']);
и на вашем пути просмотра или контроллера используйте маршрут ('userLogin'); для маршрута к этой конкретной функции в вашем контроллере