Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#2 Laravel 5.x » Составные формы » 04.07.2019 12:58:45

abutan
Ответов: 2

Здравствуйте всем.
В Laravel работаю недолго и эпизодически, поэтому всегда много вопросов.
Подскажите пожалуйста, как в Laravel  подключить одну форму к другой. То есть, например, при регистрации юзер указывает не только личные данные, но и данные своих документов (к примеру, текущий паспорт и старые паспорта). Данные документов вынесены в отдельную таблицу.
И мне надо чтобы юзер заполнял одновременно несколько форм и они одновременно отправлялись, валидировались и тд
Как это правильно реализуется в Laravel? Может есть какое то расширение или это уже реализовано из коробки, а я туплю? Может есть где почитать?
Заранее благодарен за подсказку.

#3 Re: Laravel 5.x » Не работает марширут » 05.10.2018 14:31:02

В шаблоне(к примеру в 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');
    }

Если все это, примерно так, присутствует, а ошибка все та же, то не представляю что это sad

Ой забыл, 'namespace' => 'Admin', это потому что AdminController у меня лежит в папке app/Http/Controllers/Admin , просто для админ раздела нужно много разных контролеров, и я их вынес в отдельную папку, соответственно , и всех их роуты в отдельной группе.

#4 Re: Laravel 5.x » Сервис провайдер » 04.10.2018 12:02:54

Добрый день.
Не совсем понятен вопрос. А зачем контролер указывать в списке провайдеров? Мы в него внедряем зависимость из классов указанных в этом списке. Ну и внедряем. Он то сам по себе. Зачем его то вносить в этот список?
Мы вообще в него можем через конструктор внедрить любую зависимость, с любого класса, хоть указанного в каком то списке, хоть не указанного. Вы же можете вынести сложную валидацию в отдельный request, а потом внедрить ее через контейнер зависимостей в контролер и использовать его методы. А этот request не будет внесен ни в какие списки, как и сам контролер.

#5 Re: Laravel 5.x » Не работает марширут » 04.10.2018 11:47:59

А что написано в AdminController ? Есть там что то? Вторая часть ошибки

There is either no index document or the directory is read-protected

намекает на то что метода индекс там может и не быть. А еще должна быть вьюха index.blade.php по пути указанному в роуте.

#6 Re: Laravel 5.x » Не работает марширут » 04.10.2018 11:30:14

Ну попробуйте посмотреть в таблице users есть роли или нет . Хотя если честно не пойму, Вы делаете сайт или что?

#7 Re: Laravel 5.x » Не работает марширут » 03.10.2018 14:09:24

А я же как могу знать что  у вас и как?
Но судя по всему надо просто зарегистрироваться и войти )))

#8 Re: Laravel 5.x » Не работает марширут » 03.10.2018 13:33:32

Роли и все остальные данные юзера хранятся в бд. Можно, конечно, поизвращаться и сделать методы присвоения ролей, а можно пойти в бд и вручную вбить нужный данные в нужной таблице.

#9 Re: Laravel 5.x » Не работает марширут » 03.10.2018 13:25:32

Ну значит где то по умолчанию прописан auth .

#10 Re: Laravel 5.x » Не работает марширут » 03.10.2018 13:05:02

Access forbidden!You don't have permission to access the requested directory. There is either no index document or the directory is read-protected

Вход запрещен. Прописаны роли и разрешения для входа в админку. Присвойте себе нужную роль)))

#11 Re: Laravel 5.x » Наполение данных через Faker » 03.10.2018 11:19:40

Ну в модели то надо прописать fillable . Все остальное в контролере, в методе create. Там у вас должен быть валидатор, где написано что и в каком виде должно передаться в какое поле таблицы, ну и сам create или make где и написано что именно вы передаете. Вот там где то ошибку и ищите.
Ну правила валидатора должны соответствовать тому что вы задавали при создании таблицы в бд

#12 Re: Laravel 5.x » Наполение данных через Faker » 03.10.2018 10:47:30

Ошибка же не в этом классе, а где то в создании вашего поста. Где то вы передаете что то не так или не то,  как прописали в валидации.

#13 Re: Laravel 5.x » Права доступа для опредленных записей в базе » 03.10.2018 08:49:09

Здравствуйте.
Мне кажется самый простой вариант добавить юзерам в бд поле 'страна' (если , конечно, менеджеры это юзеры с ролью 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

#14 Re: Laravel 5.x » Как записать данные в сессию » 03.10.2018 08:06:44

Положить в сессию

$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

#15 Laravel 5.x » Статус 419 в post запросах в тестах » 28.09.2018 13:05:41

abutan
Ответов: 0

Здравствуйте всем.
Заранее извиняюсь, если вопрос нубский, только начинаю изучать 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 запросы проходят.
Подскажите, пожалуйста, в какую сторону копать то?

Подвал раздела