Ответы пользователя по тегу Laravel
  • Как правильно сделать валидацию?

    @D3lphi
    Напишите собственное правило валидации. Универсально. Сможете использовать его не только для постов, а для чего угодно.
    Ответ написан
    Комментировать
  • Как получить товары из категории?

    @D3lphi
    Воспользуемся отношениями. В модель Category добавить метод:

    public function products()
    {
        return $this->belongsToMany(Prdouct::class, 'product_catalog', 'category_id', 'product_id', 'id');
    }


    Где Product - модель товаров. 'product_catalog' - так называемая, pivot table (таблица объединения товаров и категорий). 'product_id' - id товара в pivot таблице, 'category_id' - id категории в pivot таблице.

    Таким образом, вы сможете получать товары, относящиеся к конкретной категории так:
    Categoty::find(1)->products;
    Ответ написан
  • Какие файлы laravel надо ставить на гит?

    @D3lphi
    При создании проекта Laravel сам создает необходимые .gitignore файлы. Под версионным контролем находится все кроме:
    bootstrap/cache
    storage (Его поддиректорий)
    vendor
    Файлы .sqlite, если имеются

    Такой долгий деплой, судя по всему, происходит из-за того, что vendor тоже находится под контролем vcs.

    Если нужно развернуть проект снова, делаете git clone, а затем выполняете composer install и ожидаете, пока "подтянутся" зависимости.
    Ответ написан
    Комментировать
  • Как работает @yield в Laravel?

    @D3lphi
    Вы создаете шаблон (Назовем его, first.blade.php), вставляете в него @yield():
    <div class="example">
        @yield('content')
    </div>


    Затем вы наследуете от этого шаблона другой шаблон (second.blade.php) и прописываете в него конструкцию @section() с тем же именем, что указали у yield:
    @extends('first')
    
    @section('content')
        Hello, World!
    @endsection


    Теперь вы рендерите второй шаблон:
    class Controller
    {
        public function indexAction()
        {
            return view('second');
        }
    }


    Рендерится вот такая страница:
    <div class="example">
        Hello, World!
    </div>


    Таким образом, получается, что @yield() служит своеобразным маркером, на место которого будет подставлено содержимое @section() дочернего шаблона.
    Ответ написан
    3 комментария
  • Как осуществить множественный insert данных в laravel?

    @D3lphi
    $class->insert([
        [
            'name' => 'Михаил',
            'surname' => 'Лермонтов'
        ],
        [
            'name' => 'Александр',
            'surname' => 'Пушкин'
        ],
        [
            'name' => 'Лев',
            'surname' => 'Толстой'
        ],
    ]);

    Добавит в таблицу 3 новых записи.
    Ответ написан
    Комментировать
  • Laravel начать транзакцию и закончить в разных местах?

    @D3lphi
    Может быть, вам подойдет этот способ:
    DB::transaction(function () {
        // do somethimg...
        // Если внутри функции будет брошено исключение, то произойдет автоматический вызов DB::rollback().
        // Если же все пройдет "как надо", будет произведен автоматический коммит.
    });
    Ответ написан
    1 комментарий
  • Как разграничить доступ в laravel 5.4?

    @D3lphi
    Laravel Enrust
    В документации все очень доходчиво объясняется. Читаем, используем.
    Ответ написан
    Комментировать
  • Как развернуть скачанный проект с github на laravel?

    @D3lphi
    В корневой папке проекта выполнить команду:
    composer install

    P.S: "Заранее" пишется слитно.
    Ответ написан
    Комментировать
  • Проанализировать время выполнения запроса?

    @D3lphi
    1) Использовать профилировщик, например, xdebug. В результате, получаем подробную информацию о выполнении всех вызовов в коде. Затем, с помощью какого-либо инструмента просматриваем эту инфу в удобочитаемом формате.
    2) Установить пакет Laravel debugbar. Вы получите панель отладки, в которой будет отображаться время, затраченной на загрузку фреймворк и на выполнения самого кода, время выполнения запросов к базе данных. Так же, вы сможете померить время выполнения, интересующих вас функций таким образом:
    Debugbar::startMeasure('example', 'Time for example code');
    // код, который нужно проанализировать
    Debugbar::stopMeasure('example');
    Ответ написан
    Комментировать
  • Как решить ошибку InvalidArgumentException?

    @D3lphi
    Вам же черным по белому написано: View [structure.edit_contactspage] not found. Что значит: файл шаблона structure.edit_contactspage не найден. Идите в директорию resources/view/structure и смотрите, что там с файлом edit_contactspage.blade.php. Как следует из описания исключения, его вообще не существует.
    Ответ написан
    Комментировать
  • Laravel 5.4 jwt RESTful API и базовый сайт?

    @D3lphi
    Я советую для большего контроля над авторизацией и пользователями в целом использовать пакет Sentinel. Полная интеграция с Laravel. Умеет все, что только можно, в том числе восстанавливать пароли, активировать пользователей (Например, по emai'у). Так же присутствует API авторизация и временная "заморозка" доступа к аккаунту.
    Собственно, с помощью него вы сможете отказаться от стандартных Auth-контроллеров фреймворка.
    Ответ написан
    2 комментария
  • Как лучше делать админку на laravel?

    @D3lphi

    Как лучше делать админку на laravel?

    Слово "лучше" в данном контексте совершенно не уместно. Почему? Смотрите ниже.


    стоит ли использовать различные готовые пакеты


    Смотря, что для вас в данный момент времени является первоочередной задачей. Если это скорость разработки, то да, стоит. Если же требуется что-то оригинальное или же нестандартное, то, возможно, стоит попробовать реализовать админку своими средствами. Но опять же, если только вы уверены в том, что сделаете это хорошо.
    Я к тому, что нужно уметь достойно верстать.


    Правильно ли я понимаю, что бэкенд (админка) должна быть совершенно отдельно от фронта?


    Что в вашем понимании "отдельно"? Поместить ее в другую папку?


    Я так понял, что даже модели должны быть разные, как для фронта, так и для бэкенда, правильно ли я понял?


    Отдельные модели? Это еще для чего? То есть, для пользователя у вас будут 2 разные модели? Нет, модели одни и те же.


    AdminLte это всего лишь вьюшка для админки или он имеет какой то функционал?

    Только шаблон. Функционала нет, прикручивать нужно самому.

    Вот, кстати, отличная админ-панель Voyager. Создана специально для Laravel'а. Она, в отличии, от admin lte так же имеет богатый функционал. Да и выглядит отлично.
    Ответ написан
    5 комментариев
  • Laravel DB. Как работать с объектами?

    @D3lphi
    В цикле перебираем элементы коллекции и обращаемся к ним как к объекту:
    foreach($result as $item) {
        echo $item->id;
    }

    Ну, или же, так:
    $result[0]->id;

    Если вы воспользуетесь методом first() вместо get(), то сможете обращаться к полям так:
    $result->id;

    Так как в этом случае система будет "уверена" в том, что "вытащила" только одну строку из базы данных.
    В документации же этого нет, верно?
    Ответ написан
  • Почему не запускается контроллер Laravel?

    @D3lphi

    Пытаюсь запустить контроллер (не переходя на страницу, а именно сам файл контроллера).

    Тау вот оно что! Вот почему вчера у вас ничего не работало. А я то голову сломал, что у вас там не так было. Вы бы хотя бы язык для начала подняли на приличный уровень, прежде чем на фреймворк переходить. Объясняю для особо одаренных: просто так взять и "запустить класс" (Мне стыдно, что я это говорю) нельзя! Как вам верно сказали, запуск контроллера происходит вследствие достаточно длительного процесса booting'а (запуска) фреймворка, запрос проходит несколько этапов прежде, чем дойти до контроллера. Если бы вы элементарно знали, что такое автозагрузка классов, вы бы поняли, почему возникает ошибка Fatal error: Class 'App\Http\Controllers\Controller' not found ...... on line 4. Да потому что не подключен у вас файл с этим родительским контроллером! Да и вообще! Даже, если бы у вас вс было подключено, то класс бы вот так сам по себе бы не запустился! А знаете почему? Нет, не скажу, извольте пойти и выучить основы ООП.


    Можно ли обращаться к контроллеру напрямую?


    НЕТ, НЕТ, НЕТ, и еще раз, НЕТ! Зачем вам вообще понадобилось это сделать???


    Возможно ли использовать класс DB вне фреймворка laravel в таком контексте:


    С помощью composer'а установить Eloquent ORM отдельно и работать с ним вне Laravel'а.


    P.S. На Laravel я перешёл только ради очень удобной реализации работы с БД, и если её можно использовать вне Laravel также, как и Eloquent ORM, буду только рад.


    Если вы используете Фреймворк только из-за ORM, и к тому же, называете ее ОЧЕНЬ УДОБНОЙ, то (не в обиду) мне вас жалко.
    И да, выучите наконец язык.
    Ответ написан
    9 комментариев
  • Почему Ларавел не видит данные $request?

    @D3lphi
    Каким образом вы сообщаете Laravel'ю о том, что это PUT запрос? Шлете параметр _method со значение PUT в запросе?
    Ответ написан
  • Как правильно коннектить JS с PHP?

    @D3lphi
    Никак. Тут есть 2 варианта: AJAX'ом слать запрос каждые 2 секунды, получать ответ, и производить нужные действия. Либо же, использовать веб сокеты.
    Вы не понимаете то, что в этом примере...
    <script language=javascript>
    var jsvar;
    
    jsvar = <?php echo $phpvar;?>
    </script>


    ...значение php переменной подставляется на этапе обработки кода php интерпретатором. Сделать то, что вы хотите не представляется возможным.

    И зачем вы используете DB? Разработчики Laravel'а дали вам ORM (Пусть и не самую хорошую), так используйте модели!
    Ответ написан
    Комментировать
  • Какой метод лучше и почему?

    @D3lphi
    Потому что контроллер по своей сути не должен работать с данными, не должен содержать логику. Его задача - принять запрос, возможно, проверить данные на валидность и отдать ответ. Всё! Больше он делать ничего не умеет. Вся бизнес логика должна выноситься в сервисный слой. А из контроллера вы будете лишь вызывать метод этого сервиса и получать ответ. В принципе, в контроллере можно писать логику, если код короткий, тогда, конечно, создавать сервис будет излишним. С данными должен работать репозиторий (как по ссылке, которую вы привели)! Не нужно делать этого в контроллере.
    Мне привычно работать с моделью прямо в контроллере

    Может быть вам и привычнее, но это не правильно. Контроллеры разрастаются и становятся жирными. Отсюда же вытекает и то, что вам приходится дублировать код.
    $post = new Post;
    $post->slug = $request->slug;
    $post->name = $request->name;
    $post->story = $request->story;
    $post->save();

    Этот кусок вам, возможно, потребуется использовать еще где-то. И да, вот такой способ, если вашей целью является просто вставка данных, юзать не стоит. В этом нет смысла. Лучше воспользоваться методом create() или же insert().
    Ответ написан
    7 комментариев
  • Как поговорить с фасадом DB и узнать как он отработал?

    @D3lphi
    Метод delete() возвращает булевое значение (true/false), в зависимости от того, удался запрос или нет. По нему и проверяйте.
    Судя по вашему вопросу, вы не понимаете, что такое фасад. Фасад сам по себе ничего не реализует и не "отрабатывает", он лишь достает объект из контейнера и вызывает у него метод, который вы "вызвали у фасада".
    Ответ написан
    3 комментария
  • Правильна ли я понимаю логику создания формы laravel?

    @D3lphi
    Значит, смотрите: адрес_1 - адрес, по которому будет переходить пользователь, чтобы увидеть и заполнить эту форму. адрес_3 - обработчик формы. Здесь мы выполняем действия с формой. Например, если бы это была форма регистрации, то здесь бы располагалась логика регистрации пользователя. Опять же, под словом "здесь" я понимаю не именно контроллер. Всю бизнес логику лучше выносить в сервисный слой. Контроллер будет лишь вызывать методы этого сервиса и отдавать ответ пользователю.
    Ответ написан
    2 комментария