Forge0100:
>Call to undefined method Illuminate\\\\Database\\\\Eloquent\\\\Collection::present()
Правильно. У коллекции нету такого метода. Его нужно вызывать конкретно на модели.
Можно добавить в Controller метод present, который будет принимать коллекцию, проходится по ней и на каждой модели вызывать present()->toArray().
Или вообще написать свой хелпер except который будет принимать коллекцию, и фильтровать ее.
Forge0100:
>illuminate/support: ~5.0
Он поддерживает L5.
Там же есть пример как его использовать, что непонятно?
Просто делаем класс UserPresenter с методом toArray() и в нем пишем:
public function toArray()
{
return array_except($this->entity->toArray(), ['activated', 'activation_code']);
}
И потом вызываем его $user->present()->toArray().
Если нужно вообще без лишних телодвижений, то просто через переменную $hidden в модели скрыть нужные поля и всё.
4.2 уже отжил своё. И если проект долгоживущий, и планируется его дальнейшее развитие, то стоит потратить пару дней чтобы перевести его на 5.1, так как чем дальше, тем труднее будет его поддерживать.
Valeriy Donika: на Yii возможно и быстрее создать простенький блог, но когда дело пойдет дальше, то всё будет на много хуже :)
Русский форум по laravel мертв давно уже. Вопросы лучше задавать именно на laracasts/discuss, там просто нужно разобраться в дизайне.
Valeriy Donika: Так тем более, если разработка идет из разных мест, то удобнее использовать Homestead + пушить на сервер гитом. Таким образом везде будет одинаковое окружение и актуальные исходники. В случае же если что-то поломается, то всё можно будет быстро починить. Нужно сразу привыкать работать правильно.
В laravel нету формбилдера. Он не нужен просто. Возможно есть какие-то сторонние аналоги, но я такие не испольую. Проще самому набросать роут + контроллер + пару вьюх, чем разбираться с тем, что там нагенерил скафолдинг.
Valeriy Donika: не нужно смущаться. Он настраивается 1 раз, и работает без проблем. Работаешь локально, затем пушишь на сервер и получаешь работающий продукт.
Valeriy Donika: Ставишь локально laravel.com/docs/5.1/homestead и работаешь локально.
Если нужно залить на сервер, то пушишь и всё. Как настроить репозиторий на сервере я написал выше.
Valeriy Donika: не так. Проект лежить локально в гите. Туда же комитися. Когда нужно он просто пушится на сервер и там автоматически разворачивается. Работать напрямую на сервер - моветон.
Muhammad: валидировать, как я писал выше, должен FormRequest класс. Я дал ссылку как это правильно делать.
Таким образом в $request уже будут валидные данные, которые можно просто передавать в сервис регистрации.
public function postCreate(RegisterUserRequest $request)
{
$user = $this->userRegistration->register($request->all());
return __ возвращаем ответ __;
}
Для исключений есть отдельная папка app/Exceptions, но хранить их можно где угодно. Всё зависит от структуры проекта.
Я обычно переопределяю метод render в app/Exceptions/Handler.php и обрабатываю все ошибки так, как мне это нужно.
Таким образом у меня чистые контроллеры, без тысячи try/catch блоков.
Если речь про то, что папки vendor нету в git, то все верно, её там и не должно быть.
Когда проект пушится на сервер, нужно просто сделать composer install, чтобы скачать нужные зависимости.
Чтобы все работало как надо, файл composer.lock должен быть в гите, тогда на сервер поставятся именно те зависимости, которые у вас стоят локально.
Muhammad: В модели можно сделать метод register, который будет просто создавать юзера. Но при регистрации обычно нужно делать еще много дополнительных телодвижений, которые не должны быть в модели.
Muhammad: просто если мне потребуется сделать регистрацию юзера не из контроллера, а например из админки, то мне не придется дублировать весь этот код, а просто вызвать метод у сервиса.
Делать метод register в модели не правильно, по идеалогии Laravel. Для этого нужно выделять отдельный сервис\job
Muhammad: Я обычно делаю отдельный сервис для регистрации. Например App\Services\UserRegistration, который занимается всем связанным с регистрацией (например создание дополнительных полей в БД, активация юзера, создание сессии и т.д. В общем все те вещи, которые нужно сделать во время регистрации.). UserRegistration это просто отдельный класс с методом register, который принимает данные для регистрации.
Так же он кидает событие UserRegistered, которое уходит в очередь и затем обрабатывается.
В обработчике события можно делать те вещи, которые не нужно делать непосредственно при регистрации.
Например отправка Welcome емайла, запись в логи, нотификация админу и т.д.
>Call to undefined method Illuminate\\\\Database\\\\Eloquent\\\\Collection::present()
Правильно. У коллекции нету такого метода. Его нужно вызывать конкретно на модели.
Можно добавить в Controller метод present, который будет принимать коллекцию, проходится по ней и на каждой модели вызывать present()->toArray().
Или вообще написать свой хелпер except который будет принимать коллекцию, и фильтровать ее.
По другому не решить.