Laravel по-русски

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

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

#1 02.12.2017 18:13:25

Где находится исходный код Validator::make?

В контроллере

namespace App\Http\Controllers;

use Validator;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

class client extends Controller
{
 ...
public function val(Request $request)
{
$validator = Validator::make($request->all(), [
    'toppings' => [
        'required',
        Rule::notIn(['sprinkles', 'cherries']),
    ],
]);
}
}

Но класс Validator находится где-то глубоко https://laravel.com/api/5.5/Illuminate/ … dator.html
В нём нет метода make.

Почему он подключается строкой use Validator; , а не строкой use Illuminate\Contracts\Validation\Validator?

Не в сети

#2 02.12.2017 18:37:37

Re: Где находится исходный код Validator::make?

Значит это не тот валидатор, а \Validator.

Не в сети

#3 02.12.2017 18:44:41

Re: Где находится исходный код Validator::make?

Почему он подключается строкой use Validator; , а не строкой use Illuminate\Contracts\Validation\Validator?

Для удобства. Здесь Validator - это фасад Illuminate\Support\Facades\Validator, за которым прячется определенный функционал. Вот сам метод make

Не в сети

#4 02.12.2017 22:38:36

Re: Где находится исходный код Validator::make?

Спасибо за ответ.

Пусть фасад. Но почему путь к нему такой Illuminate\Support\Facades\Validator, и он не указан в строке use?
И это не тот make. Мой make должен быть static.

Не в сети

#5 02.12.2017 22:51:35

Re: Где находится исходный код Validator::make?

Пусть фасад. Но почему путь к нему такой Illuminate\Support\Facades\Validator, и он не указан в строке use?

Потому что alias в config/app.php:

'Validator' => Illuminate\Support\Facades\Validator::class

И это не тот make. Мой make должен быть static.

А чей это make? И где твой make?

Почитай про __callStatic

Не в сети

#6 03.12.2017 01:36:41

Re: Где находится исходный код Validator::make?

Как всё запутано...

А где же тогда __callStatic? В самом классе его нет. Базового класса у этого класса тоже нет. Магия какая-то. И главное совсем непонятно зачем так делать. Почему нельзя было этот make сразу статическим сделать. Тут может какое-то желание иметь возможность переопределить стандартный make, ну так его можно было бы переопределить при наследовании. И совсем непонятно зачем тут статика.

Я уже и документация прочитал, и книжку Laravel Up & Running, но там на тему архитектуры всех этих классов почти ничего нет.

Не в сети

#7 03.12.2017 09:34:42

Re: Где находится исходный код Validator::make?

А где же тогда __callStatic?

https://github.com/illuminate/support/b … e.php#L213

Базового класса у этого класса тоже нет.

class Validator extends Facade

Почему нельзя было этот make сразу статическим сделать

Где-то читал, что сделано ради возможности тестирования.

какое-то желание иметь возможность переопределить стандартный make

Плохое желание. Желание что-то переопределить во фреймворке (классы, изначально вынесенные из vendor авторами не в счет) обычно значит, что подход к решению задачи не верный.

там на тему архитектуры всех этих классов почти ничего нет.

Потому что эти знания при разработке проекта не нужны. Разве что для общего развития.

Не в сети

#8 03.12.2017 12:08:33

Re: Где находится исходный код Validator::make?

class Factory implements FactoryContract https://github.com/illuminate/validatio … ry.php#L98
class Validator implements ValidatorContract https://github.com/laravel/framework/bl … idator.php
А где class Validator extends Facade?

А чем плохо было бы тестирование без статического метода? Пока я вот ничего не могу понять, что происходит. В исходном коде не могу понять как классы наследуются, где мой класс, где метод мой.

Я имел в виду желание авторов этих классов в первую очередь. Зачем-то же они нагородили такую хитрую конструкцию, что непонятно где происходит проверка. Ну вот хочу посмотреть как у них проверка проходит. Вот смотрю я сюда https://github.com/illuminate/validatio … y.php#L148 и не понимаю ни что такое $this->translator
ни что за функция для проверки вызывается в конечном итоге return call_user_func($this->resolver, $this->translator, $data, $rules, $messages, $customAttributes); Наверное, можно в слепую делать не понимая, я же тоже не понимаю как машина под капотом устроена, но управляю ей. Но тут всё же несколько другой случай. Я программист, а не пользователь, и не могу по исходному коду понять, что в нём происходит. sad

Не в сети

#9 03.12.2017 12:20:11

Re: Где находится исходный код Validator::make?

А где class Validator extends Facade?

https://github.com/illuminate/support/b … tor.php#L8

не понимаю ни что такое $this->translator
ни что за функция для проверки вызывается в конечном итоге return call_user_func

Здесь копание и гугл помогут. Все есть в документации PHP.

Я программист, а не пользователь, и не могу по исходному коду понять, что в нём происходит

Ты пользователь фреймворка. Мне эти знания никак не помогают в работе веб макакой и я их получил больше из любопытства. Если хочешь понять как все это работает, я ответил выше как это сделать.

Не в сети

#10 03.12.2017 12:47:05

Re: Где находится исходный код Validator::make?

Спасибо. Ладно буду пытаться работать как пользователь. Моя проблема в том, что у меня уже есть информационная система (ERP), которую я пишу и поддерживаю c 2006 года. И у меня уже нет совместимости по ряду моментов. Например, сейчас мне нужно CRUD первый сделать.
И мне надо мои ограничения целостности привести к ограничениям целостности Laravel дополнив своими https://laravel.com/docs/5.5/validation … tion-rules
Я не могу имя таблиц в БД менять, мне в дочернем классе от Model в конструкторе приходится делать $this->setTable('mytblname');

И вот я должен шагать пока по этим граблям. Если бы я с нуля писал, то было бы намного проще. Можно, конечно, сразу начать всё с чистого листа, и потом уже БД конвертнуть... Но система большая. На её переписывание несколько месяцев может уйти, я даже не знаю сколько.
А мне параллельно нужно успевать и старую систему дописывать.

Не в сети

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