LINUX.ORG.RU

Laravel 5.5 и «Undefined variable: route» в виде

 ,


0

1

Пытаюсь заставить работать вот эту капчу:

https://github.com/igoshev/laravel-captcha

Если дать команду:

artisan vendor:publish --provider="Igoshev\Captcha\Providers\CaptchaServiceProvider" --tag="views"

То сгенерируется вид вот с таким содержмым:
<img src="{{ $route }}"
     alt="https://github.com/igoshev/laravel-captcha"
     style="cursor:pointer;width:{{ $width }}px;height:{{ $height }}px;"
     title="{{ $title }}"
     onclick="this.setAttribute('src','{{ $route }}?_='+Math.random());var captcha=document.getElementById('{{ $input_id }}');if(captcha){captcha.focus()}"
>

Если этот вид его вставить в другой вид через директиву:
@include('vendor.bone.captcha.image')

То при открытии страницы будет ошибка:
Undefined variable: route (View: /site/resources/views/vendor/bone/captcha/image.blade.php) (View: /site/resources/views/vendor/bone/captcha/image.blade.php)

То есть, в коде вида не хватает переменной $route. А куда она потерялась и почему ее нет?

Еще непонятно, почему в тексте ошибки один и тот же View два раза написан.

★★★★★
Ответ на: комментарий от goingUp

На страничке гитхаба указано, что как @captcha вставляется поле ввода:

Showing a Captcha in a View:

@captcha
<input type="text" id="captcha" name="captcha">

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от goingUp

А, ты имешь в виду, что в виде, вместо:

@include('vendor.bone.captcha.image')

надо писать:
@captcha

?

Я пробовал так делать, но ошибка та же самая.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от goingUp

Судя по всему, директива @captcha разворачивается в

<?php echo Igoshev\Captcha\Facades\Captcha::getView() ?>

Но пока что мне непонятно, почему нет переменной $route.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от goingUp

А вообще, почему это в видах должна быть переменная $route?

В Laravel 5.5 я такого требования не нашел...

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от goingUp

Или вид обязательно должен вызываться из контроллера, в котором обязательно надо прописать:

use Illuminate\Http\Request;

?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от goingUp

Попробовал сделать так:

- роутинг ведет на контроллер,
- в контроллере прописано «use Illuminate\Http\Request;»
- контроллер вызывает вид
- в виде пробую обратиться к переменной $route, вот так: {{ $route }}

И получаю, что переменной $route нет.

Может, ее и не должно быть? Может инструкция и код этой капчи для более другой версии Laravel?

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 2)
Ответ на: комментарий от goingUp

В общем, обошел проблему так. В контроллере делаю такой вызов вида:

return view('enterItemId', ['route'=>url()->current()]);

И вывод картинки заработал.

* * *

Но мне не нравится как я сделал. Хотя бы из-за того, что я не получил строку роутинга. Но я читал документацию:

https://laravel.com/docs/5.5/routing#accessing-the-current-route

И там написано, что есть такие методы:
$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Однако на странице документации по самому классу Route таких методов нету:

https://laravel.com/api/5.5/Illuminate/Routing/Route.html

И если попробовать написать такой код:
return view('enterItemId', ['route'=>Route::currentRouteName()]);

То будет ошибка:


BadMethodCallException
Method currentRouteName does not exist.



Я уже не знаю какой документации верить. Но вроде как однозначно, в документации на странице https://laravel.com/docs/5.5/routing ошибка, если они рассказывают про несуществующие методы.

В связи с чем вопрос: а каким методом в Laravel 5.5 можно получить текущий роут?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Однако на странице документации по самому классу Route таких методов нету:

Это другой класс Route, указанные выше методы из фасада. Если ты все делаешь как написано у автора, а у тебя не работает, то стоит запостить баг на гитхаб.

goingUp ★★★★★
()
Ответ на: комментарий от Xintrea

Ты наверное не тот неймспейс используешь, УМВР, выводит имя роута. Читай раздел документации про фасады.

use Illuminate\Support\Facades\Route;
...
dd(Route::currentRouteName());

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.