【问题标题】:Undefined variable in Laravel trying to post source ID routeLaravel 中的未定义变量试图发布源 ID 路由
【发布时间】:2020-09-19 17:19:43
【问题描述】:

目前正致力于在仪表板后面构建一个新闻 api。我最近刚刚开始收到错误 Undefined variable: sourceId (View: C:\Laravel8Auth\resources\views\dashboard.blade.php)。 我去过所有有源 ID 的地方,但我无法弄清楚它可能是什么。 以下是一些必要的代码,我使用 Laravel 8.x 和 JetStream 我在这方面相当新,只是想搞砸。 网页php

`<?php

use Illuminate\Support\Facades\Route;
use App\Models\Api;
use App\Http\Controllers\ApiController;

///Route::get('/', [ApiController::class,'displayNews']);
///Route::get('/fetchNewsFromSource', [ApiController::class, 'fetchNewsFromSource'])->name('fetchNewsFromSource');
///Route::post('/sourceId', 'ApiController@displayNews');
Route::get('/', 'App\Http\Controllers\ApiController@displayNews');
Route::post('sourceId', 'App\Http\Controllers\ApiController@displayNews');

Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
    return view('dashboard');
})->name('dashboard');
`

仪表板 php

 <!DOCTYPE html>
<html lang="{{ config('app.locale') }}">
 <head>
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
     <title>News Application with Laravel</title>
     <!-- Fonts -->
     <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet" type="text/css">
 
     <!-- Styles -->
     <link href="{{ asset('css/app.css') }}" rel="stylesheet">
     <!-- Latest compiled and minified CSS -->
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
 
 </head>
 <body>
 <div id="appendDivNews">
     <nav class="navbar fixed-top navbar-light bg-faded" style="background-color: #e3f2fd;">
         <a class="navbar-brand" href="#">News Around the World</a>
     </nav>
     {{ csrf_field() }}
     <section id="content" class="section-dropdown">
         <p class="select-header"> Select a news source: </p>
         <label class="select">
             <select name="news_sources" id="news_sources">
                 <option value="{{$sourceId}} : {{$sourceName}}">{{$sourceName}}</option>
                 @foreach ($newsSources as $newsSource)
                     <option value="{{$newsSource['id']}} : {{$newsSource['name'] }}">{{$newsSource['name']}}</option>
                 @endforeach
             </select>
 
         </label>
         <object id="spinner" data="spinner.svg" type="image/svg+xml" hidden></object>
     </section>
     <div id="news">
         <p> News Source : {{$sourceName}} </p>
 
 
         <section class="news">
             @foreach($news as $selectedNews)
 
                 <article>
                     <img src="{{$selectedNews['urlToImage']}}" alt=""/>
                     <div class="text">
                         <h1>{{$selectedNews['title']}}</h1>
                         <p style="font-size: 14px">{{$selectedNews['description']}} <a href="{{$selectedNews['url']}}"
                                                                                        target="_blank">
                                 <small>read more...</small>
                             </a></p>
                         <div style="padding-top: 5px;font-size: 12px">
                             Author: {{$selectedNews['author'] ? : "Unknown" }}</div>
                         @if($selectedNews['publishedAt'] !== null)
                             <div style="padding-top: 5px;">Date
                                 Published: {{ Carbon\Carbon::parse($selectedNews['publishedAt'])->format('l jS \\of F Y ') }}</div>
                         @else
                             <div style="padding-top: 5px;">Date Published: Unknown</div>
                         @endif
 
                     </div>
                 </article>
             @endforeach
         </section>
 
 
     </div>
 </div>
 
 </body>
 <!-- jQuery library -->
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
 
 <!-- Latest compiled JavaScript -->
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
 <!-- Scripts -->
 <script src="{{ asset('js/site.js') }}"></script>
 
 </html>
apicontroller.php 应该从中获取新闻 api

<?php
namespace App\Http\Controllers;
use App\Models\Api;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
class ApiController extends Controller
{
    /**
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function displayNews(Request $request)
    {
        $response = $this->determineMethodHandler($request);
        $apiModel = new Api();
        $response['news'] = $apiModel->fetchNewsFromSource($response['sourceId']);
        $response['newsSources'] = $this->fetchAllNewsSources();
        return view('dashboard', $response);
    }

    /**
     * @param $request
     * @return mixed
     */
    protected function determineMethodHandler($request)
    {
        if ($request->isMethod('get')) {
            $response['sourceName'] = config('app.default_news_source');
            $response['sourceId'] = config('app.default_news_source_id');
        } else {
            $request->validate([
                'source' => 'required|string',
            ]);
            $split_input = explode(':', $request->source);
            $response['sourceId'] = trim($split_input[0]);
            $response['sourceName'] = trim($split_input[1]);
        }
        return $response;
    }
    /**
     * @return mixed
     */
    public function fetchAllNewsSources()
    {
        $response = Cache::remember('allNewsSources', 22 * 60, function () {
            $api = new Api;
            return $api->getAllSources();
        });
        return $response;
    }
} 

【问题讨论】:

  • &lt;option value="{{$sourceId}} 在 1 秒内找到它......显然没有将该变量传递给该视图,而您也不是......那应该是什么?它应该来自哪里?
  • @lagbox 将使用来自 ApiController 的控制器进行更新
  • 你有一个get 路由/dashboard,它返回这个视图并且不传递任何数据..它在你上面显示的路由中
  • 我对你说的话有点困惑
  • 我现在明白了哇(不是讽刺)谢谢!我在找错地方了,现在我知道我在做什么了

标签: php html css laravel variables


【解决方案1】:

你应该将一个带有变量的数组传递给视图

view('dashboard', ["sourceId" =&gt; 1, /* and so on */]);

我不明白你在那里做什么。

【讨论】:

  • 我正在尝试将 newsAPI 传递给仪表板
猜你喜欢
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 2018-12-16
相关资源
最近更新 更多