我未能在组件中创建可计算的变量



在我的Laravel 8应用程序中,我创建了一个带有命令的组件:php artisan make:component Admin/Auth/loggedUserHasPermissions

我把它命名为:

<x-admin.auth.logged-user-has-permissions :logged-user="getLoggedUser()" :show-only-icons="true"/>

在app/View/Components/Admin/Auth/loggedUserHasPermissions.php中添加1个变量hasAdminRolehasAdminRole:

<?php
namespace AppViewComponentsAdminAuth;
use IlluminateViewComponent;
class loggedUserHasPermissions extends Component
{
public $loggedUser;
public $showOnlyIcons= false;
public $hasAdminRole= false;
public function __construct( $loggedUser, bool $showOnlyIcons= false )
{
Log::info( '-1 $showOnlyIcons ::' . print_r( $showOnlyIcons, true  ) );
echo '<pre>$showOnlyIcons::'.print_r($showOnlyIcons,true).'</pre>';
$this->loggedUser = $loggedUser;
$this->showOnlyIcons = $showOnlyIcons;
$this->hasAdminRole = false;
}
public function render()
{
Log::info( '-1 $showOnlyIcons ::' . print_r( $this->showOnlyIcons, true  ) );
return view('components.admin.auth.logged-user-has-permissions');
}
}

和resources/views/components/admin/auth/logged-user-has-permissions.blade.php

<div>
hasAdminRole::{{ $hasAdminRole }};;<br>
$showOnlyIcons::{{ $showOnlyIcons }};;<br>
resources/views/components/admin/auth/logged-user-has-permissions.blade.php000

但是当我想在上面的组件模板中使用hasAdminRole时,我得到了错误:and I got error:

Undefined variable: hasAdminRole (View: /mnt/_work_sdb8/wwwroot/lar/AdsBackend8/resources/views/components/admin/auth/logged-user-has-permissions.blade.php)

Var $showOnlyIcons被渲染为ok,如果行$hasAdminRole被注释。

  1. 为什么会出错,哪一种方法是有效的?
  2. 在__construct和render方法中,我有一些登录命令,但没有显示在日志文件中或在屏幕上。为什么如此?我需要一些调试工具

MODIFIED BLOCK:在官方文档中有一个"组件方法"块与isSelected示例,但当我试图使用它在我的组件,如app/View/Components/Admin/Auth/loggedUserHasPermissions.php文件:

public function isSelected($option)
{
return $option === $this->selected;
}

但是试图在模板中调用它:

$isSelected::{{ isSelected(123) }};;<br>

I goit error:

Call to undefined function isSelected() 

我还注意到,在文档的例子中,isSelected被称为var,前缀为"$":

<option {{ $isSelected($value) ? 'selected="selected"' : '' }} value="{{ $value }}">

是文档中的错误吗?

哪一种方式是有效的?

MODIFIED BLOCK 2:我上传了一个例子;https://github.com/sergeynilov/Lar8Test请打开欢迎页面并在文件中资源/视图/组件/admin/认证/logged-user-has-permissions.blade.php取消$hasAdminRole和$isSelected的注释行-我得到错误,这些变量没有定义

我使用命令

php artisan make:component  Admin/Auth/loggedUserHasPermissions

用于创建组件

谢谢!

组件名应该是PascalCase格式。如果查看https://laravel.com/docs/8.x/blade#components文档,所有示例的组件名称都是PascalCase。因此,您应该将loggedUserHasPermissions替换为LoggedUserHasPermissions

最新更新