Я делаю пример, подтверждающий концепцию / игрушку, чтобы попытаться ознакомиться с подробностями Laravel, и я столкнулся с ошибкой, которой не ожидал.
Внутри моегоВ блейд-шаблоне я сделал вызов вспомогательной функции, содержащейся в контроллере (контроллер был сгенерирован через php artisan make:controller CBookController
).И звонок из шаблона лезвия был {{isset($val->prep) ? CBookController::toDate($val->prep) : ''}}
.Я получил это работает, и все было денди.Я решил, что хочу извлечь эту вспомогательную функцию из этого контроллера, чтобы использовать ее в другом месте проекта.ПРИМЕЧАНИЕ. Я мог бы вызвать код только из вида, если бы включил строку: <?php use app\Http\Controllers\CBookController; ?>
в шаблон блэйда
Имейте в виду, все это работало правильно и не выдавало никаких ошибок.
Итак, вот тут-то и началось.
Я сделал звонок >php artisan make:controller Helper
Я перефразировал все ссылки в представлении, чтобы сказать Helper
вместо CBookController
то есть {{isset($val->prep) ? CBookController::toDate($val->prep) : ''}}
-> {{isset($val->prep) ? Helper::toDate($val->prep) : ''}}
и
<?php use app\Http\Controllers\CBookController; ?>
-> <?php use app\Http\Controllers\Helper; ?>
до того, как я все проверил, все работало должным образом.Но после упомянутого рефакторинга все пошло не так.
Обратите внимание: я понимаю, что для более продвинутого пользователя laravel создание «вспомогательного» контроллера не имеет смысла.Опять же, как более начинающий пользователь, я просто пытался внести небольшие постепенные изменения, которые по-прежнему будут работать, как и ожидалось.Я не пытаюсь выяснить, как правильно использовать вспомогательные функции (по крайней мере, на этом перекрестке), и не выясняю ничего другого, кроме того, почему создание нового контроллера и последующая ссылка на этот контроллер в представлении приводят меня в замешательство.
Моя интуиция подсказывает мне, что make:controller
делает больше за кадром, чем я знаю, и это является причиной проблемы, но я не знаю, что искать или где искать.
Было бы полезно любое объяснение того, почему это небольшое изменение нарушает страницу.
Я могу подтвердить, что и CBookController.php, и Helper.php находятся в одном каталоге, поэтому не должно бытьОшибка filepath с оператором use
в представлении.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CBookController extends Controller
{
public function main()
{
$result = \DB::connection('database')
->table("docs")
->join("plans","docs.bn","=","plans.bn")
->select('docs.bn',
"plans.a",
'b as Status',
'c as fee',
'd as exec',
'e as mail',
'f as prep')
->where('id','=','19')
->where('b','=','N')
->get()
->toArray();
return view('test.Control_Book_Test')->with('result',$result);
}
public static function toDate($strToConvert)
{
return date("m-d-Y",strtotime($strToConvert));
}
}
это оригинальный контроллер (отредактированные поля столбцов для анонимности, я считаю, что все оставалось согласованным, но независимо от этого, он работал раньше)
Новый контроллер выглядит следующим образом
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class Helper extends Controller
{
public static function toDate($strToConvert)
{
return date("m-d-Y",strtotime($strToConvert));
}
}
и, наконец, вот представление (до рефакторинга)
<?php use app\Http\Controllers\CBookController; ?>
@section('content')
<div style = "overflow-x: scroll">
<table class="table table-striped- table-bordered table-hover table-checkable" id="magicWand">
<thead>
<tr>
<th>Col 1</th>
<th>Col 2</th>
<th>Col 3/th>
<th>Col 4</th>
<th>Col 5</th>
<th>Col 6</th>
<th>Col 7n</th>
<th>Col 8</th>
<th>Col 9</th>
<th>Col 10</th>
<th>Col 11</th>
<th>Col 12</th>
<th>Col 13</th>
<th>Col 14<br></th>
</tr>
</thead>
<tbody>
@foreach($result as $k => $val)
<tr>
<td>{{isset($val->bn) ? $val->bn : ''}}</td>
<td>{{isset($val->ShortPlanName) ? $val->ShortPlanName : ''}}</td>
<td>n/a</td>
<td>{{isset($val->Status) ? $val->Status : ''}}</td>
<td>{{isset($val->fee) ? "$".number_format($val->fee,2) : ''}}</td>
<td>{{isset($val->exec) ? CBookController::toDate($val->exec) : ''}}</td>
<td>{{isset($val->mail) ? CBookController::toDate($val->mail) : ''}}</td>
<td>{{isset($val->prep) ? CBookController::toDate($val->prep) : ''}}</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endsection
Для краткости нет смысла перекомпилировать весь файл только с некоторыми измененными именами, но вот строки, которые содержат измененную ссылку
<?php use app\Http\Controllers\CBookController; ?>
(самая первая строка)
<td>{{isset($val->exec) ? CBookController::toDate($val->exec) : ''}}</td>
(в пределах @foreach)
<td>{{isset($val->mail) ? CBookController::toDate($val->exec) : ''}}</td>
(в пределах @foreach)
<td>{{isset($val->prep) ? CBookController::toDate($val->exec) : ''}}</td>
(в пределах @foreach)
Я ожидал, что страница будет работать нормально, но в итоге получаю страницу с сообщением "Class 'app \ Http \ Controllers \ Helper' not found"