Функция загрузки AppServiceProvider и динамический заголовок - PullRequest
0 голосов
/ 20 ноября 2018

я передал переменную всем представлениям в AppServiceProvider boot () я сохранил в этой переменной имя первого пользователя в базе данных, чтобы я мог поместить его в свой макет как заголовок

проблема возникает, когда естьни один пользователь в базе данных (новые базы данных) исключение, которое говорит, что $ title не является определением, и это правда, что это не определение, поэтому я попытался сделать если утверждение, но оно по какой-то причине игнорирует его

boot ()

  public function boot()
    {
      Schema::defaultStringLength(191);

      View::composer('*',function($view){
        $title = DB::table('users')->first();
        $view->with('title',$title);
      });

я попробовал это как логику, но не сработало

 public function boot()
    {
      Schema::defaultStringLength(191);

      $check = DB::table('users')->first();
        if ($check != null) {
          View::composer('*',function($view){
            $title = DB::table('users')->first();
            $view->with('title',$title);  });
        }else {
          return view('nouser');
        }

Синтаксическая ошибка отсутствует, но я думаю, что проблема в том, что каждый раз, когда сайт перезагружается, он отображает все макеты(У меня есть 3) Гость и администратор имеют

<title>{{$title->name}}</title>

и приложение, название которого не является динамическим и кодировку страницы, которую я кодировал, я расширил макет приложения, потому что у него нет этой переменной, которая не определена

проблема в том, что мне нужно скрыть это исключение от пользователя и перенаправить его на страницу, которая говорит, пожалуйста, зарегистрируйтесь, а затем я перенаправлю его на главные страницы послевырождение

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Я решил это, выполнив это на своем контроллере страниц, инсталлированном провайдером appservice

Контроллер страниц

public function gethome()
  {
    $title = DB::table('users')->first();
      if ($title == null) {
        return redirect('/register');
      }else{
        $cvg = CV::all();
        return view('guest.cv')->with('cvg', $cvg);
  }

и сделал это для всех гостевых каталогов, для которых они являются 4 основными маршрутами

в AppServiceProvider

public function boot()
    {
      Schema::defaultStringLength(191);

      View::composer('*',function($view){
      $title = DB::table('users')->first();
      $view->with('title',$title);
  });
    }

в моем гостевом макете

<title>{{$title->name}}</title>

надеюсь, что это поможет кому-то иметь такую ​​же проблему. Удачи и веселого кодирования

0 голосов
/ 20 ноября 2018

Основная проблема в вашем коде;в случае отсутствия пользователя вы пытаетесь что-то напечатать в объекте.Вы должны заботиться о SOLID принципах, пытаясь реализовать что-либо.

$countUsers = DB::table('users')->count();
$title = null;
if($countUsers > 0){
    $title = DB::table('users')->first()->name; 
}
View::composer('*',function($view){
    $view->with('title',$title);
});
if($countUsers == 0 ){
    return view('nouser');
}

и в своем шаблоне используйте

<title>{{$title}}</title>

вместо

<title>{{$title->name}}</title>

Использование View::composer не является лучшим решением для динамически меняющихся заголовков.Таким образом, вы можете использовать пакет artesaos / seotools для динамических заголовков, описаний и многого другого.Кроме того, он имеет динамическую функцию генерации мета в твиттере и opengraph, что очень важно для SEO.

<?php
....
class ForExampleController extends {
    public function viewUser($ID){
        $user = User::findOrFail($ID);
        SEO::setTitle($user->name);
        SEO::setDescription("This is the profile of ".$user->name);
        SEO::opengraph()->setUrl(...); // you can set users profile url
        // and much more..
    }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...