我正在尝试在Laravel中创建一个联系人弹出表单,但似乎路由无法正常工作。我从“ contact.blade.php”开始,使用“ contact-provider.js”。浏览器给出以下错误:
GET http://127.0.0.1:8000/en/vendor/186/contact 500 (Internal Server Error)
contact.blade.php(完整)(已插入home-extended.blade.php->见下)
<section class="o-container u-mt-x12 u-mb-x12">
<div class="o-grid">
<div class="o-grid__col u-12/12">
<div class="c-card c-card--bigborder u-p-x6 u-mb-x4">
<div class="o-grid">
<div class="o-grid__col u-7/12@lg u-border--contact">
<h3>@lang('profile.vendorContactTitle')</h3>
<div class="o-grid">
<div class="o-grid__col u-5/12@md">
<p class="u-bold"><span class="u-weight-bold">{{ $profile->user->company_name }}</span><br/>{{$profile->services->pluck("name")->implode(", ")}}</p>
{{ $profile->subtitle }}
@if ($profile->address)
<p class="p2">
{{ $profile->address->street }} {{ $profile->address->street_no }}<br/>
{{ $profile->address->zip }} {{ $profile->address->city }} | {{$profile->address->country_code}}
</p>
@endif
</div>
<div class="o-grid__col u-7/12@md">
<table>
@if($profile->phone)
<tr>
<td class="p2 u-weight-bold u-color-deep-cove-blue u-weight-bold">@lang('profile.vendorContactPhone'):</td>
<td class="p2"><a class="c-link c-link__primary" href="tel:{{ $profile->phone }}">{{ $profile->phone }}</a></td>
</tr>
@endif
@if($profile->mobile)
<tr>
<td class="p2 u-weight-bold u-color-deep-cove-blue">@lang('profile.vendorContactMobile'):</td>
<td class="p2">{{ $profile->mobile }}</td>
</tr>
@endif
@if($profile->email && !$profile->user->is_ahuser)
<tr>
<td class="p2 u-weight-bold u-color-deep-cove-blue">@lang('profile.vendorContactMail'):</td>
<td class="p2"><a href="mailto:{{ $profile->email }}"
class="c-link c-link__primary">{{ str_limit($profile->email, $limit = 27, $end = '...') }}</a>
</td>
</tr>
@endif
@if($profile->web)
<tr>
<td class="p2 u-weight-bold u-color-deep-cove-blue">@lang('profile.vendorContactWeb'):</td>
<td class="p2">
@if(strpos($profile->web, 'http') !== 0)
<a href="http://{{ $profile->web }}" class="c-link c-link__primary" target="_blank">{{ $profile->web }}</a>
@else
<a href="{{ $profile->web }}" class="c-link c-link__primary" target="_blank">{{ $profile->web }}</a>
@endif
</td>
</tr>
@endif
</table>
</div>
</div>
</div>
<div class="o-grid__col u-5/12@lg u-mt-x6 u-mt-x0@lg">
<h6>@lang('profile.vendorServicesTitle')</h6>
@foreach($profile->services as $service)
@foreach ($service->children->whereIn('id', $profile->user->categories->pluck('id')) as $child)
<p class="p2 u-weight-bold u-color-gray u-mt-x6 u-mb-x2">{{ $child->name }}</p>
<ul class="o-list o-list--inline c-unordered-list--divider p2">
@foreach($child->specifications->whereIn('id', $profile->user->specifications->pluck('id')) as $specification)
<li class="o-list__item">{{ $specification->name }}</li>
@endforeach
</ul>
@endforeach
@endforeach
</div>
</div>
<div class="o-grid">
<div class="o-grid__col u-7/12@lg u-border--contact ">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="contact-provider-button">
<td><a href="#" class="c-btn c-btn--red c-btn--small"
id="contact-form-button"
data-detail-route="{{ route('vendor.contact', ['en', $profile->user->id]) }}"
data-modal-open="contact-provider-form">@lang('profile.btnContact')</a>
</td>
</div>
</div>
</div>
</div>
</div>
<div class="o-grid__col u-8/12">
@if (isset($data) || !Route::is('vendor.edit'))
<a href="#" data-modal-open="modal-report" class="c-link c-link__primary c-link--small js_modal-report"><span
data-icon="Q"></span> @lang('profile.vendorReportUser')</a>
@endif
</div>
<div class="o-grid__col u-4/12 u-text-right">
@if(!$profile->user->is_ahuser)
<a href="#" data-modal-open="modal-imprint" class="c-link c-link__primary c-link--small">@lang('profile.vendorImprintLink')</a>
@endif
</div>
@if($profile->user->is_ahuser)
<div class="o-grid__col u-12/12 u-pt-x10">
<p class="p2">@lang('profile.transferProfileText')
<a href="{{ route('registration.transferProfile', $profile->user->id) }}" class="c-link c-link__primary c-link--small">@lang('profile.transferProfileCTA')</a>
</p>
</div>
@endif
</div>
</section>
home-extended.blade.php
@extends ('layouts.profile-extended')
@push('inject-header-css')
<link rel="stylesheet" href="{{ asset('css/slider-custom.css') }}">
@endpush
@section ('inject-content')
@php ($lang = app()->getLocale()) @endphp
<main class="u-mt-x12">
<!-- show detail modal-->
@include('components.modals.search-detail')
@include ('components.global.google-translate')
@isset($page)
<section class="o-container u-mb-x6">
<div class="o-grid">
@php
$pageTitle = $page->getTranslatedTitle(request('lang', $lang));
$titleTranslate = 'notranslate';
if (!(strlen($pageTitle) > 0)) {
$titleTranslate = 'translate';
$pageTitle = $page->getTranslatedTitle(request('lang', config('language.fallback')[$lang]));
}
@endphp
<div class="o-grid__col u-12/12 {{$titleTranslate}}">
@if(($page->category && $page->category->has_horses) || $page->slug === 'events')
<div class="o-media o-media--res">
<div class="o-media__fixed">
<h2>{{ $pageTitle }}</h2>
</div>
<div class="o-media__fluid u-text-right@md">
<button data-modal-open="modal-filter" id="filter-button"
class="c-btn c-btn--small c-btn--red">@lang('global.filterResults')
</button>
</div>
</div>
@else
<h2>{{strip_tags($pageTitle)}}</h2>
@endif
</div>
</div>
</section>
@if($page->category && $page->category->has_horses)
<section class="o-container u-mb-x6 c-faq__container provider-search search-form-results"
data-url="{{ route('api.search') }}" id="page-horse-search"
data-token="{{ csrf_token() }}" data-category-id="{{ $page->category->id }}" data-search-only="horse"
data-by-vendor="{{ $profile->id }}" data-target-container="horse-result">
<div class="horse-result" id="horse-result">
<span class="o-grid o-grid--equal-height results"></span>
</div>
</section>
@include('components.modals.filter-horse')
@endif
@if($profile->has_events && $page->slug === 'events')
<section class="o-container u-mb-x6 c-faq__container provider-search search-form-results"
data-url="{{ route('api.search') }}" id="page-event-search"
data-token="{{ csrf_token() }}" data-search-only="event"
data-by-vendor="{{ $profile->id }}" data-target-container="event-result">
<div class="event-result" id="event-result">
<span class="o-grid o-grid--equal-height results"></span>
</div>
</section>
@include('components.modals.filter-event')
@endif
<section class="o-container s-contentBlock">
@foreach ($page->content_blocks as $block)
@include($block->getView(), ['lang' => $lang, 'block' => $block])
@endforeach
</section>
@endisset
@include ('components.vendor.contact')
@include ('components.global.banner.provider')
</main>
@endsection
@push('inject-footer-scripts')
<script type="text/javascript"
src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
<script type="text/javascript" src="{{ URL::asset('js/search-form/range-slider.js') }}"></script>
<script type="text/javascript" src="{{ URL::asset('js/provider-search.js') }}"></script>
<script type="text/javascript" src="{{ URL::asset('js/search-form/show-detail.js') }}"></script>
<script type="text/javascript" src="{{ URL::asset('js/provider/contact-provider.js') }}"></script>
<script type="text/javascript">
RangeSlider.sliderHelper.initRangeSliders();
</script>
@endpush
在web.php中,路由通过以下方式完成:
Route::get('{urlLang}/vendor/{vendor}/contact', 'VendorController@contact')
->name('vendor.contact');
contact-provider.js:
var ExtendedForm = ExtendedForm || {};
/**
* Show search form modal with detailed info
* @type {{init}}
*/
ExtendedForm.showSearchDetail = (function ($) {
var _$container;
var _$modal;
var _clearAndShow = function () {
$('.modal-content', _$modal).html('');
_$modal.css({display: 'block'});
};
var _getContent = function (url) {
$.get(url, function (res) {
$('.modal-content', _$modal).html(res);
});
};
/**
* DOM ready inits
* @private
*/
var _init = function () {
_$container = $('.contact-provider-button');
_$modal = $('#contact-provider-form');
$(function () {
// click search result
_$container.on('click', '#contact-form-button', function (evt) {
evt.preventDefault();
var url = $(this).data('detail-route');
$('body').addClass('u-overflow--hidden u-relative');
_clearAndShow();
_getContent(url);
});
});
};
return {
init: _init
}
})(jQuery);
ExtendedForm.showSearchDetail.init();
在VendorController中,我有一个函数联系人:
public function contact(VendorProfile $vendor){
return view(
'components.profile.contact',
['profile' => $vendor, 'vendor' => $vendor->load('user.address')]
);
}
服务器错误日志:
[2019-02-26 08:14:34] local.ERROR: Route [vendor/contact] not defined. (View: /Users/stevengerrits/ah-website/resources/views/components/vendor/contact.blade.php) (View: /Users/stevengerrits/ah-website/resources/views/components/vendor/contact.blade.php) {"exception":"[object] (ErrorException(code: 0): Route [vendor/contact] not defined. (View: /Users/stevengerrits/ah-website/resources/views/components/vendor/contact.blade.php) (View: /Users/stevengerrits/ah-website/resources/views/components/vendor/contact.blade.php) at /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:305, ErrorException(code: 0): Route [vendor/contact] not defined. (View: /Users/stevengerrits/ah-website/resources/views/components/vendor/contact.blade.php) at /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:305, InvalidArgumentException(code: 0): Route [vendor/contact] not defined. at /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:305)
[stacktrace]
#0 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(45): Illuminate\\View\\Engines\\CompilerEngine->handleViewException(Object(ErrorException), 0)
#1 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(59): Illuminate\\View\\Engines\\PhpEngine->evaluatePath('/Users/stevenge...', Array)
#2 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/View/View.php(137): Illuminate\\View\\Engines\\CompilerEngine->get('/Users/stevenge...', Array)
#3 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/View/View.php(120): Illuminate\\View\\View->getContents()
#4 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/View/View.php(85): Illuminate\\View\\View->renderContents()
#5 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Http/Response.php(42): Illuminate\\View\\View->render()
#6 /Users/stevengerrits/ah-website/vendor/symfony/http-foundation/Response.php(206): Illuminate\\Http\\Response->setContent(Object(Illuminate\\View\\View))
#7 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Router.php(724): Symfony\\Component\\HttpFoundation\\Response->__construct(Object(Illuminate\\View\\View))
#8 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router::toResponse(Object(Illuminate\\Http\\Request), Object(Illuminate\\View\\View))
#9 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): Illuminate\\Routing\\Router->prepareResponse(Object(Illuminate\\Http\\Request), Object(Illuminate\\View\\View))
#10 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#11 /Users/stevengerrits/ah-website/app/Http/Middleware/Language.php(36): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#12 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\Language->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#13 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#14 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#15 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#16 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#17 /Users/stevengerrits/ah-website/app/Http/Middleware/LanguageSetting.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#18 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\LanguageSetting->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#19 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#20 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(68): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#21 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#22 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#24 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(63): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#27 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#30 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#33 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#36 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Router.php(660): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#37 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Router.php(635): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#38 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Router.php(601): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#39 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Router.php(590): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#40 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#41 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#42 /Users/stevengerrits/ah-website/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(65): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
.....
#51 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30):Illuminate \ Routing \ Pipeline-> Illuminate \ Routing \ {closure}(对象(Illuminate \ Http \ Request))
#52 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149):Illuminate \ Foundation \ Http \ Middleware \ TransformsRequest-> handle(对象(Illuminate \ Http \ Request ),对象(关闭))
#53 /Users/stevengerrits/ah-website/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http \请求))
...
#64 /Users/stevengerrits/ah-website/server.php(21):require_once('/ Users / stevenge ...')
#65 {main}
“}
路由列表:
GET|HEAD | {urlLang} | home | Closure | web |
| | POST | {urlLang}/cart/finalize | cart.finalize | App\Http\Controllers\CartController@finalize | web,auth |
| | POST | {urlLang}/cart/remove/{item} | cart.remove | App\Http\Controllers\CartController@remove | web,auth |
| | GET|HEAD | {urlLang}/category | category.index | | App\Http\Controllers\ProReminderController@checkIfRemind | web |
| | PUT|PATCH | {urlLang}/vendor/{vendor} | vendor.update | App\Http\Controllers\VendorController@update | web,auth,can:update,vendor |
| | GET|HEAD | {urlLang}/vendor/{vendor} | vendor.show | App\Http\Controllers\VendorController@show | web |
| | GET|HEAD | {urlLang}/vendor/{vendor}/category/{category}/subpages | vendor.page.subpages | App\Http\Controllers\VendorPageController@subpages | web,auth |
| | DELETE | {urlLang}/vendor/{vendor}/changes | vendor.changes.destroy | App\Http\Controllers\VendorChangesController@destroy | web,auth,can:update,vendor |
| | POST | {urlLang}/vendor/{vendor}/changes | vendor.changes.store | App\Http\Controllers\VendorChangesController@store | web,auth,can:update,vendor |
| | GET|HEAD | {urlLang}/vendor/{vendor}/contact | vendor.contact | App\Http\Controllers\VendorController@contact | web |
| | GET|HEAD | {urlLang}/vendor/{vendor}/edit | vendor.edit | App\Http\Controllers\VendorController@edit | web,auth,can:update,vendor |
| | POST | {urlLang}/vendor/{vendor}/event | vendor.event.store
我为{urlLang}使用了一个路由组:
路线:: view('/','welcome');
Route::get('{urlLang}', function () {
$static = \App\StaticPage::where([
'external_id' => 1,
'lang' => app()->getLocale(),
])->first();
return view('welcome', ['static'=>$static]);
})->name('home');
最佳答案
{{ route('vendor.contact', $profile->user->id) }}
看起来像是您仅将一个参数传递给laravel路由器。您的网址需要两个参数,一个用于
{urlLang}
,另一个用于{vendor}
尝试
{{ route('vendor.contact', ['en', $profile->user->id]) }}