#php #laravel #forms
Вопрос:
Эй, там! Я пытаюсь создать пользователя для своего проекта.
User.php — модель
<?php
namespace AppModels;
use IlluminateContractsAuthMustVerifyEmail;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
use LaravelSanctumHasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var string[]
*/
protected $fillable = [
'name','email','password','address','mobile_number', 'department_id', 'designation', 'role_id', 'img', 'start_from'
];
/**
* The attributes that should be hidden for serialization.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
UserController.php
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsUser;
use AppModelsDepartment;
use AppModelsRole;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return IlluminateHttpResponse
*/
public function create()
{
$departments = Department::get()->all();
$roles = Role::get()->all();
return view('admin.user.create', compact('departments','roles'));
}
/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$this->validate($request,[
'firstname'=>'required',
'lastname'=>'required',
'email'=> 'required | string | email | max:255 | unique:users',
'password'=>'required|string',
'department_id'=>'required',
'role_id'=>'required',
'img'=>'required|mimes:jpeg,jpg,png',
'start_from'=>'required',
'designation'=>'required',
]);
$data = $request->all();
if($request->hasFile('img')){
$img = $request ->img->hashName();
$request->img->move(public_path('profile'),$img);
}else{
$img = 'avatar2.png';
}
$data['name'] = $request->firstname.' '.$request->lastname;
$data['img']=$img;
$data['password'] = bcrypt($request->password);
User::create($data);
return redirect()->back()->with('message','User-ul a fost creat!');
}
/**
* Display the specified resource.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param IlluminateHttpRequest $request
* @param int $id
* @return IlluminateHttpResponse
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function destroy($id)
{
//
}
}
create_users_table.php
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->string('address')->nullable();
$table->string('mobile_number')->nullable();
$table->integer('department_id');
$table->integer('role_id');
$table->string('designation');
$table->date('start_from');
$table->string('img');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
create.blade.php
@extends('admin.layouts.master')
@section('content')
<div class="container mt-5">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item active" aria-current="page">Register employee
</li>
</ol>
</nav>
@if(Session::has('message'))
<div class="alert alert-success">
{{Session::get('message')}}
</div>
@endif
<form action="{{route('users.store')}}" method="post" enctype="multipart/form-data">@csrf
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">General Information</div>
<div class="card-body">
<div class="form-group">
<label>First name</label>
<input type="text" name="firstname" class="form-control" required="">
</div>
<div class="form-group">
<label>Last name</label>
<input type="text" name="lastname" class="form-control" required="">
</div>
<div class="form-group">
<label>Address</label>
<input type="text" name="address" class="form-control">
</div>
<div class="form-group">
<label>Mobile number </label>
<input type="number" name="mobile_number" class="form-control">
</div>
<div class="form-group">
<label>Department</label>
<select class="form-control" name="department_id" required="">
@foreach($departments as $department)
<option value="{{$department->id}}">{{$department->name}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label>Designation</label>
<input type="text" name="designation" class="form-control" required="">
</div>
<div class="form-group">
<label>Start date</label>
<input type="date" name="start_from" class="form-control" placeholder="dd-mm-yyyy" required="">
</div>
<div class="form-group">
<label>Image</label>
<input type="file" name="image" class="form-control" accept="image/*" required="">
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-header">Login Information</div>
<div class="card-body">
<div class="form-group">
<label>Email </label>
<input type="email" name="email" class="form-control" required="">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" name="password" class="form-control" required="">
</div>
<div class="form-group">
<label>Role</label>
<select class="form-control" name="role_id" required="">
@foreach($roles as $role)
<option value="{{$role->id}}">{{$role->name}}</option>
@endforeach
</select>
</div>
</div>
</div>
<br>
<div class="form-group">
<button class="btn btn-primary " type="submit">Submit</button>
</div>
</div>
</div>
</form>
</div>
@endsection
web.php
<?php
use IlluminateSupportFacadesRoute;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/home', [AppHttpControllersHomeController::class, 'index'])->name('home');
Route::post('departments','Departmentcontroller@store');
Route::resource('departments', 'Departmentcontroller');
Route::view('hrmanagement-app','admin.create');
Route::post('roles','RoleController@store');
Route::resource('roles', 'RoleController');
Route::post('users','UserController@store');
Route::resource('users', 'UserController');
Я не знаю, в чем проблема, другие формы работают. Только этот просто перефразирует страницу, и ничего не происходит -> нет записи в базу данных SQL и никаких ошибок не отображается.
Пожалуйста, помогите!
Обновить
Я пробую функцию dd() и то же самое, она обновляет страницу.
Комментарии:
1. Я просто комментирую проблему в ваших маршрутах, так как вы уже указали некоторые
Route::resource()
, которые вам не нужныRoute::post(Controller@store)
, поскольку это уже подразумевается в ресурсах.2. я пробовал команды, такие как php artisan migrate:обновить , перенести:откат , сделать:миграция. Я не знаю, где изменить код…
3. В своей форме вы вызываете маршрут с именем
users.store
(здесь действие = «{{маршрут (‘пользователи.магазин’)}}») , но в вашемweb.php
файле я не вижу никакого маршрута с этим именем ! Вот почему запись не сделана4. @Atika это не «Маршрут::сообщение(«пользователи»,»пользовательскийконтроллер@магазин»)» это ? или что это такое?
5. Что вы пытались сделать, чтобы решить эту проблему? Если вы хотите пропустить перенаправление во время отладки, просто не выполняйте перенаправление
Ответ №1:
В своей форме вы называете маршрут с именем users.store
, здесь :
<form action="{{route('users.store')}}" method="post" enctype="multipart/form-data">
пока в вашем web.php
файле нет маршрута с таким именем. Так что попробуйте изменить свой маршрут :
Route::post('users', 'UserController@store');
Автор: :
Route::post('users', 'UserController@store')->name('users.store');
Обычно это должно работать !
Комментарии:
1. никаких результатов, тот же поток 🙁
2.Я просто заметил кое-что еще. в своем контроллере вы выполняете
img'=>'required'
,$request->hasFile('img')
, но в своей форме , которую вы назвали знаменитойimg
image
, возможно , это предотвращает вставку. измените своюname='image'
формуname='img'
и повторите попытку…3. Да, вот оно. это работа и мои данные публикуются в БД. Спасибо!