Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Спасибо!
Буду пробовать.
Здравствуйте всем.
В Laravel работаю недолго и эпизодически, поэтому всегда много вопросов.
Подскажите пожалуйста, как в Laravel подключить одну форму к другой. То есть, например, при регистрации юзер указывает не только личные данные, но и данные своих документов (к примеру, текущий паспорт и старые паспорта). Данные документов вынесены в отдельную таблицу.
И мне надо чтобы юзер заполнял одновременно несколько форм и они одновременно отправлялись, валидировались и тд
Как это правильно реализуется в Laravel? Может есть какое то расширение или это уже реализовано из коробки, а я туплю? Может есть где почитать?
Заранее благодарен за подсказку.
В шаблоне(к примеру в app.blade.php по пути resources/views/layouts/app.blade.php) ссылка типа
<a href="{{ route('admin.index') }}">Админ раздел</a>
в контролере
class AdminController extends Controller
{
public function index()
{
return view('admin.index');
}
}
в resources/views/admin/index.blade.php
@extends('layouts.app')
@section('content')
'какой то код ...'
@endsection
в routes/web.php
Route::group(
[
'prefix' => 'admin',
'namespace' => 'Admin',
'middleware' => ['auth'],
'as' => 'admin.',
],
function (){
Route::get('/', 'AdminController@index')->name('index');
}
Если все это, примерно так, присутствует, а ошибка все та же, то не представляю что это
Ой забыл, 'namespace' => 'Admin', это потому что AdminController у меня лежит в папке app/Http/Controllers/Admin , просто для админ раздела нужно много разных контролеров, и я их вынес в отдельную папку, соответственно , и всех их роуты в отдельной группе.
Добрый день.
Не совсем понятен вопрос. А зачем контролер указывать в списке провайдеров? Мы в него внедряем зависимость из классов указанных в этом списке. Ну и внедряем. Он то сам по себе. Зачем его то вносить в этот список?
Мы вообще в него можем через конструктор внедрить любую зависимость, с любого класса, хоть указанного в каком то списке, хоть не указанного. Вы же можете вынести сложную валидацию в отдельный request, а потом внедрить ее через контейнер зависимостей в контролер и использовать его методы. А этот request не будет внесен ни в какие списки, как и сам контролер.
А что написано в AdminController ? Есть там что то? Вторая часть ошибки
There is either no index document or the directory is read-protected
намекает на то что метода индекс там может и не быть. А еще должна быть вьюха index.blade.php по пути указанному в роуте.
Ну попробуйте посмотреть в таблице users есть роли или нет . Хотя если честно не пойму, Вы делаете сайт или что?
А я же как могу знать что у вас и как?
Но судя по всему надо просто зарегистрироваться и войти )))
Роли и все остальные данные юзера хранятся в бд. Можно, конечно, поизвращаться и сделать методы присвоения ролей, а можно пойти в бд и вручную вбить нужный данные в нужной таблице.
Ну значит где то по умолчанию прописан auth .
Access forbidden!You don't have permission to access the requested directory. There is either no index document or the directory is read-protected
Вход запрещен. Прописаны роли и разрешения для входа в админку. Присвойте себе нужную роль)))
Ну в модели то надо прописать fillable . Все остальное в контролере, в методе create. Там у вас должен быть валидатор, где написано что и в каком виде должно передаться в какое поле таблицы, ну и сам create или make где и написано что именно вы передаете. Вот там где то ошибку и ищите.
Ну правила валидатора должны соответствовать тому что вы задавали при создании таблицы в бд
Ошибка же не в этом классе, а где то в создании вашего поста. Где то вы передаете что то не так или не то, как прописали в валидации.
Здравствуйте.
Мне кажется самый простой вариант добавить юзерам в бд поле 'страна' (если , конечно, менеджеры это юзеры с ролью manager, если они хранятся как то по другому, то поле туда соответственно). Значение в этом поле должно точно совпадать с идентификатором или названием страны в соответствующей таблице. Как его туда подтягивать , по связи или тупо вбивать вручную, это уже от вашей фантазии. Ну и, естественно, такое же поле (страна), с таким же значением должно присутствовать в заказе.
Ну а потом в AuthServiceProvider сделать gate типа
public function boot()
{
$this->registerPolicies();
Gate::define('work-with-order', function (User $user, Order $order) {
return $user->country == $order->country;
});
}
Ну а дальше уже от фантазии, хотите в контролере навесьте этот gate через конструктор
public function __construct()
{
$this->middleware = ['can:work-with-order'];
}
Хотите в роутах на нужный (нужные) маршрут(ы) навесьте этот middleware, можно прямо в разметке show попробовать
@can('work-with-order')
'ваша разметка show.blade.php'
@endcan
вот как то так ).
Все это есть в доках https://laravel.ru/docs/v5/authorization
Положить в сессию
$request->session()->put('auth', [
'id' => $user->id,
'name' => $user->name,
'бла-бла-бла' => ' ... ',
]);
Прочитать из сессии
$session = $request->session()->get('auth');
$id = $session['id'];
$name = $session['name'];
Можно пользоваться глобальным вспомогательным методом session .
Все подробно написано в доках https://laravel.ru/posts/277
Здравствуйте всем.
Заранее извиняюсь, если вопрос нубский, только начинаю изучать Laravel.
Я пытаюсь написать тесты для страницы логина. Пытаюсь проверить работу формы, то есть для начала проверить, что если форма не заполнена, то в сессию попадут ошибки.
Код
public function testFormErrors(): void
{
$response = $this->post('/login', [
'email' => '',
'password' => '',
]);
$response
->assertStatus(302)
->assertSessionHasErrors(['email', 'password']);
}
Вроде все как положено, но в ответ прилетает Tests\Feature\Auth\LoginTest::testErrors Expected status code 302 but received 419.
В форме, естественно, токен есть.
И такая фигня происходит со всеми post запросами. Get запросы проходят.
Подскажите, пожалуйста, в какую сторону копать то?