AppServiceProvider引导功能和动态标题

时间:2018-11-20 17:41:10

标签: php laravel variables laravel-blade

我将变量传递给了AppServiceProvider boot()中的所有视图 我在此变量中存储了数据库中第一个用户的名称 这样我就可以将其作为标题

放在我的布局中

当数据库中没有用户(新数据库)时,发生问题 它通过异常表示$ title未定义,这是事实 它没有定义,所以我试图做出陈述,但是由于某种原因它忽略了它

启动()

  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>

和标题不是动态的应用程序以及我编码的nouser页面 我扩展了应用布局bcs,它没有这个未定义的变量

问题是我需要向用户隐藏此异常,并将其重定向到显示请注册的页面,然后在注册后将其重定向到主页

2 个答案:

答案 0 :(得分:0)

您的代码的主要问题是;如果没有用户,您将尝试在对象中打印某些内容。尝试实现某些东西时,您应该注意 S.O.L.I.D。原则。

$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包获取动态标题,描述,并且更加容易。此外,它还具有动态的twitter和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..
    }
}
?>

答案 1 :(得分:0)

我通过在由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>

希望这可以帮助任何遇到相同问题的人祝你好运,并享受有趣的编码