Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
В контроллере
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?
Не в сети
Значит это не тот валидатор, а \Validator.
Не в сети
Почему он подключается строкой use Validator; , а не строкой use Illuminate\Contracts\Validation\Validator?
Для удобства. Здесь Validator - это фасад Illuminate\Support\Facades\Validator, за которым прячется определенный функционал. Вот сам метод make
Не в сети
Спасибо за ответ.
Пусть фасад. Но почему путь к нему такой Illuminate\Support\Facades\Validator, и он не указан в строке use?
И это не тот make. Мой make должен быть static.
Не в сети
Пусть фасад. Но почему путь к нему такой Illuminate\Support\Facades\Validator, и он не указан в строке use?
Потому что alias в config/app.php:
'Validator' => Illuminate\Support\Facades\Validator::class
И это не тот make. Мой make должен быть static.
А чей это make? И где твой make?
Почитай про __callStatic
Не в сети
Как всё запутано...
А где же тогда __callStatic? В самом классе его нет. Базового класса у этого класса тоже нет. Магия какая-то. И главное совсем непонятно зачем так делать. Почему нельзя было этот make сразу статическим сделать. Тут может какое-то желание иметь возможность переопределить стандартный make, ну так его можно было бы переопределить при наследовании. И совсем непонятно зачем тут статика.
Я уже и документация прочитал, и книжку Laravel Up & Running, но там на тему архитектуры всех этих классов почти ничего нет.
Не в сети
А где же тогда __callStatic?
https://github.com/illuminate/support/b … e.php#L213
Базового класса у этого класса тоже нет.
class Validator extends Facade
Почему нельзя было этот make сразу статическим сделать
Где-то читал, что сделано ради возможности тестирования.
какое-то желание иметь возможность переопределить стандартный make
Плохое желание. Желание что-то переопределить во фреймворке (классы, изначально вынесенные из vendor авторами не в счет) обычно значит, что подход к решению задачи не верный.
там на тему архитектуры всех этих классов почти ничего нет.
Потому что эти знания при разработке проекта не нужны. Разве что для общего развития.
Не в сети
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); Наверное, можно в слепую делать не понимая, я же тоже не понимаю как машина под капотом устроена, но управляю ей. Но тут всё же несколько другой случай. Я программист, а не пользователь, и не могу по исходному коду понять, что в нём происходит.
Не в сети
А где class Validator extends Facade?
https://github.com/illuminate/support/b … tor.php#L8
не понимаю ни что такое $this->translator
ни что за функция для проверки вызывается в конечном итоге return call_user_func
Здесь копание и гугл помогут. Все есть в документации PHP.
Я программист, а не пользователь, и не могу по исходному коду понять, что в нём происходит
Ты пользователь фреймворка. Мне эти знания никак не помогают в работе веб макакой и я их получил больше из любопытства. Если хочешь понять как все это работает, я ответил выше как это сделать.
Не в сети
Спасибо. Ладно буду пытаться работать как пользователь. Моя проблема в том, что у меня уже есть информационная система (ERP), которую я пишу и поддерживаю c 2006 года. И у меня уже нет совместимости по ряду моментов. Например, сейчас мне нужно CRUD первый сделать.
И мне надо мои ограничения целостности привести к ограничениям целостности Laravel дополнив своими https://laravel.com/docs/5.5/validation … tion-rules
Я не могу имя таблиц в БД менять, мне в дочернем классе от Model в конструкторе приходится делать $this->setTable('mytblname');
И вот я должен шагать пока по этим граблям. Если бы я с нуля писал, то было бы намного проще. Можно, конечно, сразу начать всё с чистого листа, и потом уже БД конвертнуть... Но система большая. На её переписывание несколько месяцев может уйти, я даже не знаю сколько.
А мне параллельно нужно успевать и старую систему дописывать.
Не в сети
Страницы 1