Php 如何在Laravel中的动态网页上显示动态导航栏?
我创建了一个动态导航栏,但它不会显示在动态网页上 电流输出为: 错误例外 未定义变量:navContent(视图:C:\Users\Computer Angel\Documents\blog\resources\views\page\dynamic.blade.php) 所需的输出是my dynamic.blade.php,其中pageContent是用户通过表单和标签中的动态导航栏输入的动态页面内容 这是我的dynamic.blade.php:Php 如何在Laravel中的动态网页上显示动态导航栏?,php,laravel,Php,Laravel,我创建了一个动态导航栏,但它不会显示在动态网页上 电流输出为: 错误例外 未定义变量:navContent(视图:C:\Users\Computer Angel\Documents\blog\resources\views\page\dynamic.blade.php) 所需的输出是my dynamic.blade.php,其中pageContent是用户通过表单和标签中的动态导航栏输入的动态页面内容 这是我的dynamic.blade.php: <nav> @foreach
<nav>
@foreach($navContent as $nav)
<a href="{!!$nav->navLink!!}">{!!nav-navName!!}</a>
@endforeach
</nav>
<body>
{!!$pageContent->pageContent!!}
</body>
<form action="/storeNav" method="post">
@csrf
<label for="navName">Navigation Bar Option Name:</label><br>
<input type="text" id="navName" name="navName" autocomplete="off" value="{{ old('navName') }}">
<br>
@error('navName') <p style="color: red">{{ $message }}</p> @enderror
<label for="navLink">Navigation Bar Option Link:</label><br>
<input type="text" id="navLink" name="navLink" autocomplete="off" value="{{ old('navLink') }}">
<br>
@error('navLink') <p style="color: red">{{ $message }}</p> @enderror
<input type="submit" value="Submit">
</form>
<form action="/storePage" method="post">
@csrf
<label for="title">Title:</label><br>
<input type="text" id="title" name="title" autocomplete="off" value="{{ old('title') }}"><br>
@error('title') <p style="color: red">{{ $message }}</p> @enderror
<label for="URI">URI:</label><br>
<input type="text" id="URI" name="URI" autocomplete="off" value="{{ old('URI') }}"><br>
@error('URI') <p style="color: red">{{ $message }}</p> @enderror
<label for="pageContent">Page Content:</label><br>
<textarea id="pageContent" name="pageContent" value="{{ old('pageContent') }}"></textarea>
@error('pageContent') <p style="color: red">{{ $message }}</p> @enderror
<input type="submit" value="Submit">
</form>
这是my Page.php:
class Page extends Model
{
protected $fillable = ['title', 'URI', 'pageContent'];
}
这是我的页面迁移:
public function up()
{
Schema::create('pages', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('URI');
$table->text('pageContent');
$table->timestamps();
});
}
这是我的导航迁移:
public function up()
{
Schema::create('navs', function (Blueprint $table) {
$table->id();
$table->string('navName');
$table->string('navLink');
$table->timestamps();
});
}
这是我的createNav.blade.php:
<nav>
@foreach($navContent as $nav)
<a href="{!!$nav->navLink!!}">{!!nav-navName!!}</a>
@endforeach
</nav>
<body>
{!!$pageContent->pageContent!!}
</body>
<form action="/storeNav" method="post">
@csrf
<label for="navName">Navigation Bar Option Name:</label><br>
<input type="text" id="navName" name="navName" autocomplete="off" value="{{ old('navName') }}">
<br>
@error('navName') <p style="color: red">{{ $message }}</p> @enderror
<label for="navLink">Navigation Bar Option Link:</label><br>
<input type="text" id="navLink" name="navLink" autocomplete="off" value="{{ old('navLink') }}">
<br>
@error('navLink') <p style="color: red">{{ $message }}</p> @enderror
<input type="submit" value="Submit">
</form>
<form action="/storePage" method="post">
@csrf
<label for="title">Title:</label><br>
<input type="text" id="title" name="title" autocomplete="off" value="{{ old('title') }}"><br>
@error('title') <p style="color: red">{{ $message }}</p> @enderror
<label for="URI">URI:</label><br>
<input type="text" id="URI" name="URI" autocomplete="off" value="{{ old('URI') }}"><br>
@error('URI') <p style="color: red">{{ $message }}</p> @enderror
<label for="pageContent">Page Content:</label><br>
<textarea id="pageContent" name="pageContent" value="{{ old('pageContent') }}"></textarea>
@error('pageContent') <p style="color: red">{{ $message }}</p> @enderror
<input type="submit" value="Submit">
</form>
下面是我的github存储库链接,如果您想查看我的完整代码,或者想在集成开发环境中尝试运行代码。
谢谢你的阅读DIf抱怨找不到名为
$navContent
的变量
我看不到您将它传递给从index()
函数调用的任何视图
return view('navManagement', compact('navs'));
return view('pageManagement', compact('pages'));
您需要设置该变量并将其传递给视图
// Get the nav content however you want, this is just a crude example
$navContent = $this->getMyNavContent();
return view('navManagement', [
'navs' => $navs,
'navContent' => $navContent
]);
我猜您希望找到一种嵌入动态导航的方法,而不必在每次渲染视图时添加
navContent
,因为这正是另一个答案所建议的。您可以使用中间件来实现这一点,比如说dynamicNav
,并在该中间件组下注册您的路由
在该中间件中,您可以执行获取nav内容的所有逻辑,然后使用类似于merge
,如图所示:
$request->merge(['dynamicNav'=>$navContent])代码>
这样,您的中间件将向通过它的每个请求添加数据,尽管我不推荐这种解决方案
我要做的是缓存nav内容并使用cache()
助手在视图中检索,然后重写模型的save()
方法,以便在更新DB时也更新缓存(为了避免重复代码,您可以为nav的获取创建特征)。例如:
//在您的模型中
公共函数保存(数组$options=[])
{
Cache::put('nav-content',getNavContent());
父::save();
}
这不是解决这个问题的方法。基本上,navManagement加载navManagement.blade.php,pageManagement加载pageManagement.blade.php。我要问的是,如何在dynamic.blade.php上显示两个不同控制器的navContent和pageContent。主要是在两个控制器上都显示函数,在PageController中显示函数显示动态页面内容。在导航控制器上,显示功能显示动态导航栏。但是当我想同时显示导航栏和页面内容时,它就不起作用了。我已经修复了它,它实际上非常容易修复。让我和你们分享我的解决方案。这个问题是我的另一个问题,它展示了我的解决方案,它对我很有效。这是一个非常巧妙的想法,通过在boot方法中获取变量来实现。
// Get the nav content however you want, this is just a crude example
$navContent = $this->getMyNavContent();
return view('navManagement', [
'navs' => $navs,
'navContent' => $navContent
]);